declare: Skillnad mellan sidversioner
Admin (diskussion | bidrag) (Skapade sidan med '== Declare == (PHP 4, PHP 5, PHP 7, PHP 8) Konstruktionen `declare` används för att ange exekveringsdirektiv för en kodblock. Syntaxen för `declare` liknar andra kontrollstrukturers syntax: <pre> declare (direktiv) uttalande </pre> Direktivsektionen tillåter inställning av beteendet för `declare`-blocket. För närvarande erkänns endast tre direktiv: ticks-direktivet (se nedan för mer information om ticks-direktivet), encoding-direktivet (se nedan för me...') |
Admin (diskussion | bidrag) |
||
Rad 91: | Rad 91: | ||
När den kombineras med namnrymder är den enda lagliga syntaxen för `declare` `declare(encoding='...');` där ... är kodningsvärdet. `declare(encoding='...') {}` kommer att resultera i ett parse-fel när den kombineras med namnrymder. | När den kombineras med namnrymder är den enda lagliga syntaxen för `declare` `declare(encoding='...');` där ... är kodningsvärdet. `declare(encoding='...') {}` kommer att resultera i ett parse-fel när den kombineras med namnrymder. | ||
Se även `zend.script_encoding`. | Se även `[[zend.script_encoding]]`. |
Versionen från 18 augusti 2024 kl. 17.35
Declare
(PHP 4, PHP 5, PHP 7, PHP 8)
Konstruktionen `declare` används för att ange exekveringsdirektiv för en kodblock. Syntaxen för `declare` liknar andra kontrollstrukturers syntax:
declare (direktiv) uttalande
Direktivsektionen tillåter inställning av beteendet för `declare`-blocket. För närvarande erkänns endast tre direktiv: ticks-direktivet (se nedan för mer information om ticks-direktivet), encoding-direktivet (se nedan för mer information om encoding-direktivet) och strict_types-direktivet (se mer information i avsnittet om strikt typning på sidan om typanmälningar).
Eftersom direktiv hanteras när filen kompileras, kan endast literaler ges som direktivvärden. Variabler och konstanter kan inte användas. För att illustrera:
<?php // Detta är giltigt: declare(ticks=1); // Detta är ogiltigt: const TICK_VALUE = 1; declare(ticks=TICK_VALUE); ?>
Uttalandedelen av `declare`-blocket kommer att exekveras - hur det utförs och vilka sidoeffekter som uppstår under exekveringen kan bero på det direktiv som anges i direktivblocket.
Konstruktionen `declare` kan också användas i globalt omfång, vilket påverkar all kod som följer efter den (om filen med `declare` inkluderades så påverkar den inte den överordnade filen).
<?php // dessa är samma: // du kan använda detta: declare(ticks=1) { // hela skriptet här } // eller du kan använda detta: declare(ticks=1); // hela skriptet här ?>
Ticks
En "tick" är en händelse som inträffar för varje N lågnivå tickable-uttalanden som utförs av parsern inom `declare`-blocket. Värdet för N anges med ticks=N inom direktivsektionen för `declare`-blocket.
Inte alla uttalanden är tickable. Typiskt sett är villkorsuttryck och argumentuttryck inte tickable.
Händelsen (eller händelserna) som inträffar vid varje tick specificeras med hjälp av `register_tick_function()`. Se exemplet nedan för mer detaljer. Notera att mer än en händelse kan inträffa för varje tick.
Exempel #1 Användning av tick
<?php declare(ticks=1); // En funktion som anropas vid varje tick-händelse function tick_handler() { echo "tick_handler() called\n"; } register_tick_function('tick_handler'); // orsakar en tick-händelse $a = 1; // orsakar en tick-händelse if ($a > 0) { $a += 2; // orsakar en tick-händelse print $a; // orsakar en tick-händelse } ?>
Se även `register_tick_function()` och `unregister_tick_function()`.
Encoding
En skripts kodning kan specificeras per skript med hjälp av encoding-direktivet.
Exempel #2 Deklarera en kodning för skriptet.
<?php declare(encoding='ISO-8859-1'); // kod här ?>
Varning
När den kombineras med namnrymder är den enda lagliga syntaxen för `declare` `declare(encoding='...');` där ... är kodningsvärdet. `declare(encoding='...') {}` kommer att resultera i ett parse-fel när den kombineras med namnrymder.
Se även `zend.script_encoding`.