W3docs

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_types e encoding devono essere la prima istruzione in un file e usano la forma dichiarativa declare(strict_types=1); — non hanno un blocco e quindi non usano mai enddeclare.
  • ticks è l'unica direttiva il cui effetto è naturalmente delimitato a un blocco di istruzioni, quindi è quella da abbinare alla sintassi alternativa e a enddeclare.

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 e enddeclare) non è valido — enddeclare appartiene 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: 3

Il 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 enddeclare

strict_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.

Esercitazione

Pratica
Qual è il modo corretto per terminare l'istruzione declare in PHP?
Qual è il modo corretto per terminare l'istruzione declare in PHP?
Was this page helpful?