declare
(PHP 4, PHP 5, PHP 7)
Das declare-Konstrukt wird verwendet, um Ausführungsdirektiven für einen Codeblock festzulegen. Die Syntax von declare ist ähnlich wie die Syntax anderer Ablauf-Kontrollstrukturen:
declare (directive) statement
Die directive-Sektion erlaubt es, das Verhalten des declare-Blocks anzugeben. Aktuell werden nur drei Direktiven unterstützt: die ticks-Direktive (siehe unten für weitere Informationen über die ticks-Direktive), die encoding-Direktive (siehe unten für weitere Informationen über die encoding-Direktive), und die strict_types-Direktive (siehe den Abschnitt über strict auf der Seite über Funktionsargumente).
Version | Beschreibung |
---|---|
7.0.0 | Die strict_types-Direktive hinzugefügt |
7.0.0 | Die ticks-Direktive wirkt sich nicht mehr versehentlich auf andere Kompilationseinheiten aus. |
5.3.0 | Die encoding-Direktive hinzugefügt |
Da Direktiven behandelt werden, wenn die Datei kompiliert wird, dürfen nur Literale als Direktiven-Werte angegeben werden. Variable und Konstante können nicht verwendet werden. Zur Veranschaulichung:
<?php
// Dies ist erlaubt:
declare(ticks=1);
// Dies ist ungültig:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>
Der statement-Teil des declare-Blocks wird ausgeführt - wie genau die Ausführung aussieht und welche Seiteneffekte während der Ausführung auftreten können, ist abhängig von der im directive-Block gesetzten Direktive.
Das declare-Konstrukt kann außerdem im globalen Sichtbarkeitsbereich verwendet werden, es hat dann Auswirkungen auf den gesamten folgenden Code (wird die Datei mit der declare-Anweisung inkludiert, hat die Anweisung jedoch keine Auswirkung auf das einbindende File).
<?php
// dies sind gleichwertige Schreibweisen:
// Sie können diese Schreibweise verwenden:
declare(ticks=1) {
// hier das vollständige Skript einfügen
}
// oder diese:
declare(ticks=1);
// hier das vollständige Skript einfügen
?>
Ticks
Ein Tick ist ein Event, das für alle N Low-Level-Statements
auftritt, die vom Parser innerhalb des declare-Blocks
ausgeführt werden.
Der Wert für N wird durch die Verwendung von
ticks=N
innerhalb der
directive-Sektion des declare-Blocks
angegeben.
Nicht alle Statements führen zu einem Tick-Event. So etwa Konditionen und Argumente.
Das/die bei jedem Tick auftretenden Event(s) werden durch die Verwendung der Funktion register_tick_function() angegeben. Betrachten Sie das folgende Beispiel für mehr Details. Beachten Sie, dass mehr als ein Event bei jedem Tick auftreten kann.
Beispiel #1 Tick Nutzungsbeispiel
<?php
declare(ticks=1);
// Funktion, welche bei jeden Tick-Event aufgerufen wird
function tick_handler()
{
echo "tick_handler() aufgerufen\n";
}
register_tick_function('tick_handler');
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
?>
Beispiel #2 Tick Nutzungsbeispiel
<?php
function tick_handler()
{
echo "tick_handler() aufgerufen\n";
}
$a = 1;
tick_handler();
if ($a > 0) {
$a += 2;
tick_handler();
print($a);
tick_handler();
}
tick_handler();
?>
Siehe auch register_tick_function() und unregister_tick_function().
Encoding
Das Encoding eines Skripts kann pro Skript mittels der encoding-Direktive festgelegt werden.
Beispiel #3 Das Encoding eines Skripts deklarieren.
<?php
declare(encoding='ISO-8859-1');
// hier folgt der Code
?>
Die einzig zulässige Syntax für ein declare, das mit Namespaces kombiniert wird, ist declare(encoding='...');, wobei ... der Name des Encodings ist. declare(encoding='...') {} führt zu einem Parse-Error, wenn es mit Namespaces kombiniert wird.
Der encodete declare-Wert wird in PHP 5.3 ignoriert, sofern PHP nicht mit --enable-zend-multibyte kompiliert wurde.
PHP bietet abgesehen von phpinfo() keine Möglichkeit zur Laufzeit herauszufinden, ob es mit --enable-zend-multibyte kompiliert wurde.
See also zend.script_encoding.
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-control-structures.declare.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
Referenzen
Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.