Kontrollstrukturen
PHP Manual

declare

Das declare-Konstrukt wird verwendet, um Ausführungsdirektiven für einen Codeblock festzulegen. Die Syntax von declare ist ähnliche wie die Syntax anderer Ablauf-Kontrollstrukturen:

declare (directive)
    statement

Die directive-Sektion erlaubt es, das Verhalten des declare-Blocks anzugeben. Aktuell werden zwei Direktiven unterstützt: die ticks-Direktive (siehe unten für weitere Informationen über die ticks-Direktive) und die encoding-Direktive (siehe unten für weitere Informationen über die encoding-Direktive).

Hinweis: Die Encoding-Direktive wurde in PHP 5.3.0 hinzugefügt.

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

Achtung

Mit PHP 5.3.0 gilt Ticks als veraltet und wird mit PHP 6.0.0 entfernt.

Ein Tick ist ein Event, das 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.

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 Eine PHP-Codesektion profilen

<?php
// Eine Funktion, die die Zeit aufzeichnet, zu der sie aufgerufen wurde
function profile($dump FALSE)
{
    static 
$profile;

    
// Gibt die im Profil gespeicherten Zeiten zurück und löscht sie danach
    
if ($dump) {
        
$temp $profile;
        unset(
$profile);
        return 
$temp;
    }

    
$profile[] = microtime();
}

// Einen Tick-Handler angeben
register_tick_function("profile");

// Die Funktion vor dem declare-Block initialisieren
profile();

// Einen Codeblock ausführen, bei jedem zweiten Statement einen Tick auslösen
declare(ticks=2) {
    for (
$x 1$x 50; ++$x) {
        echo 
similar_text(md5($x), md5($x*$x)), "<br />;";
    }
}

// Die im Profiler gespeicherten Daten anzeigen
print_r(profile(TRUE));
?>

Das Beispiel analysiert den PHP-Code im 'declare'-Block und erfasst die Zeiten, an denen jedes zweite Low-Level-Statement innerhalb des Blocks ausgeführt wurde. Diese Information kann danach verwendet werden, um die langsamen Bereiche eines bestimmten Codesegments ausfindig zu machen. Dieser Prozess kann auch mit anderen Methoden ausgeführt werden - die Verwendung von Ticks ist einfacher und leichter zu implementieren.

Ticks sind sehr geeignet für das Debugging, die Implementierung einfachen Multitaskings, I/O-Verarbeitung im Hintergrund und viele weitere Anwendungen.

Siehe auch register_tick_function() und unregister_tick_function().

Encoding

Das Encoding eines Skripts kann pro Skript mittels der Encoding-Direktive festgelegt werden.

Beispiel #2 Das Encoding eines Skripts deklarieren.

<?php
declare(encoding='ISO-8859-1');
// hier folgt der Code
?>

Achtung

Die einzig zulässige Syntax für ein declare, das mit Namespaces kombiniert wird, ist declare(encoding='...');, wobei ... der encodete Wert ist. declare(encoding='...') {} bewirkt einen 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. In PHP 6.0.0 wird die encoding-Direktive verwendet, um den Scanner darüber zu informieren, mit welchem Encoding die Datei erstellt wurde. Zulässige Werte sind Encodingbezeichnungen wie UTF-8.


Kontrollstrukturen
PHP Manual