enddeclare
Scopri come PHP enddeclare chiude un blocco declare() con sintassi due punti, con esempi su ticks ed errori da evitare.
Introduzione
enddeclare è la parola chiave di chiusura per un blocco declare() scritto nella sintassi alternativa di PHP — la forma basata sui due punti che PHP offre come sostituto delle parentesi graffe. Proprio come if: viene chiuso da endif e foreach: viene chiuso da endforeach, declare(...): viene chiuso da enddeclare;.
Questa pagina illustra cosa fa effettivamente questa parola chiave, la direttiva con cui viene realisticamente utilizzata (ticks), la sintassi esatta accettata da PHP e gli errori che producono un errore di parsing.
Quando usare effettivamente enddeclare
Una direttiva declare() imposta un comportamento di esecuzione per una regione di codice. Dispone di tre direttive: ticks, strict_types e encoding. Tra queste:
strict_typeseencodingdevono essere la prima istruzione in un file e usano la forma dichiarativadeclare(strict_types=1);— non hanno un blocco e quindi non usano maienddeclare.ticksè l'unica direttiva il cui effetto è naturalmente delimitato a un blocco di istruzioni, quindi è quella da abbinare alla sintassi alternativa e aenddeclare.
In pratica significa: si ricorre a enddeclare quando si vuole un blocco ticks e si preferisce la sintassi con i due punti alle parentesi graffe. Questo è raro nel codice moderno, motivo per cui vale la pena definire con precisione la sintassi.
Sintassi
La forma alternativa sostituisce la { di apertura con un due punti e la } di chiusura con enddeclare;:
declare(directive=value):
// statements
enddeclare;La forma equivalente con le parentesi graffe è:
declare(directive=value) {
// statements
}Le due forme sono intercambiabili. Si noti che
declare(...) { ... } enddeclare;(parentesi graffe eenddeclare) non è valido —enddeclareappartiene solo alla forma con i due punti. Mescolarle è un errore di sintassi.
Esempio: un blocco ticks chiuso con enddeclare
Un tick è un evento emesso da PHP ogni N istruzioni di basso livello eseguite all'interno di un blocco declare(ticks=N). Registrare un gestore con register_tick_function() permette di eseguire codice ad ogni tick — utile per la profilazione leggera o hook in stile segnali.
<?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";Output:
Result: 3
Ticks fired: 3Il gestore viene eseguito una volta per ogni istruzione all'interno del blocco (tre assegnazioni → tre tick). Il codice al di fuori del blocco declare(...): ... enddeclare; non attiva i tick.
Errori comuni
Non combinare le parentesi graffe con enddeclare
Questo è l'errore più comune (e quello che i tutorial più vecchi sbagliano):
// ❌ Parse error: unexpected token "enddeclare"
declare(ticks=1) {
// ...
} enddeclare;Scegli uno stile — o { ... } oppure : ... enddeclare;.
Non usare enddeclare con strict_types o encoding
declare(strict_types=1) e declare(encoding='UTF-8') sono direttive a livello di file che non accettano blocchi, quindi non c'è nulla che enddeclare possa chiudere:
<?php
declare(strict_types=1); // statement form — no block, no enddeclarestrict_types deve essere la prima istruzione nel file; posizionarla dopo qualsiasi output o codice è un errore fatale.
Abbina ogni declare(...): con un solo enddeclare;
Come tutte le parole chiave della sintassi alternativa, un declare(...): aperto deve essere chiuso esattamente da un enddeclare;. Dimenticarlo lascia il blocco non terminato e PHP riporta un errore di "fine file imprevista".
Conclusione
enddeclare chiude un blocco declare(...): scritto nella sintassi alternativa di PHP. L'unica direttiva con cui la useresti realisticamente è ticks, perché strict_types e encoding sono istruzioni a livello di file senza blocco. Tieni insieme i due punti e enddeclare; e non mescolarli mai con le parentesi graffe, e la parola chiave si comporterà in modo prevedibile.
Per il quadro completo delle direttive di esecuzione, vedi declare; per la sintassi alternativa basata sui due punti nelle strutture di controllo, vedi PHP Syntax.