W3docs

enddeclare

Apprenez comment PHP enddeclare ferme un bloc declare() en syntaxe alternative avec deux-points, avec des exemples ticks et erreurs à éviter.

Introduction

enddeclare est le mot-clé de fermeture d'un bloc declare() écrit dans la syntaxe alternative de PHP — la forme basée sur les deux-points que PHP propose en substitution aux accolades. Tout comme if: est fermé par endif et foreach: est fermé par endforeach, declare(...): est fermé par enddeclare;.

Cette page explique ce que le mot-clé fait réellement, la seule directive avec laquelle il est réalistement utilisé (ticks), la syntaxe exacte acceptée par PHP, et les erreurs qui produisent une erreur de parsing.

Quand utiliser réellement enddeclare

Une directive declare() définit un comportement d'exécution pour une région de code. Elle dispose de trois directives : ticks, strict_types et encoding. Parmi celles-ci :

  • strict_types et encoding doivent être la toute première instruction d'un fichier et utilisent la forme de déclaration declare(strict_types=1); — elles n'ont pas de bloc et n'utilisent donc jamais enddeclare.
  • ticks est la seule directive dont l'effet est naturellement limité à un bloc d'instructions, c'est donc celle que l'on associe à la syntaxe alternative et à enddeclare.

En pratique, cela signifie : vous utilisez enddeclare quand vous voulez un bloc ticks et que vous préférez la syntaxe avec deux-points plutôt qu'avec des accolades. C'est rare dans le code moderne, ce qui explique précisément pourquoi il vaut la peine de bien maîtriser cette syntaxe.

Syntaxe

La forme alternative remplace l'{ d'ouverture par un deux-points et le } de fermeture par enddeclare; :

declare(directive=value):
    // statements
enddeclare;

La forme équivalente avec accolades est :

declare(directive=value) {
    // statements
}

Les deux formes sont interchangeables. Notez que declare(...) { ... } enddeclare; (accolades et enddeclare) n'est pas valide — enddeclare appartient uniquement à la forme avec deux-points. Les mélanger est une erreur de syntaxe.

Exemple : un bloc ticks fermé avec enddeclare

Un tick est un événement que PHP émet tous les N instructions de bas niveau exécutées dans un bloc declare(ticks=N). Enregistrer un gestionnaire avec register_tick_function() permet d'exécuter du code à chaque tick — utile pour du profilage léger ou des hooks de type signal.

<?php

$ticks = 0;
register_tick_function(function () use (&$ticks) {
    $ticks++;
});

declare(ticks=1):
    $x = 1;
    $y = 2;
    $z = $x + $y;
enddeclare;

echo "Result: $z\n";
echo "Ticks fired: $ticks\n";

Sortie :

Result: 3
Ticks fired: 3

Le gestionnaire s'exécute une fois par instruction à l'intérieur du bloc (trois affectations → trois ticks). Le code en dehors du bloc declare(...): ... enddeclare; ne déclenche pas de ticks.

Erreurs courantes

Ne pas combiner les accolades avec enddeclare

C'est l'erreur la plus fréquente (et ce que les anciens tutoriels font mal) :

// ❌ Parse error: unexpected token "enddeclare"
declare(ticks=1) {
    // ...
} enddeclare;

Choisissez un style — soit { ... } soit : ... enddeclare;.

Ne pas utiliser enddeclare avec strict_types ou encoding

declare(strict_types=1) et declare(encoding='UTF-8') sont des directives au niveau du fichier qui ne prennent pas de bloc, il n'y a donc rien que enddeclare puisse fermer :

<?php
declare(strict_types=1); // statement form — no block, no enddeclare

strict_types doit être la première instruction du fichier ; la placer après toute sortie ou tout code est une erreur fatale.

Faire correspondre chaque declare(...): avec un enddeclare;

Comme tous les mots-clés de syntaxe alternative, un declare(...): ouvert doit être fermé par exactement un enddeclare;. L'oublier laisse le bloc non terminé et PHP signale une erreur « fin de fichier inattendue ».

Conclusion

enddeclare ferme un bloc declare(...): écrit dans la syntaxe alternative de PHP. La seule directive avec laquelle vous l'utiliseriez réalistement est ticks, car strict_types et encoding sont des instructions au niveau du fichier sans bloc. Gardez le deux-points et enddeclare; ensemble et ne les mélangez jamais avec des accolades, et le mot-clé se comporte de manière prévisible.

Pour une vue complète des directives d'exécution, consultez declare ; pour la syntaxe alternative basée sur les deux-points dans les structures de contrôle, consultez PHP Syntax.

Practice

Pratique
Quelle est la bonne façon de terminer l'instruction declare en PHP ?
Quelle est la bonne façon de terminer l'instruction declare en PHP ?
Was this page helpful?