declare: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(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...')
 
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`.