Traditionelle Zusicherungen (PHP 5 und 7)
Wird der Parameter assertion
als String
übergeben, so wird der String als PHP-Code interpretiert.
Vorteile der Übergabe des Parameters
assertion
als Zeichenkette sind geringerer Mehraufwand,
wenn die Zusicherungsprüfung deaktiviert ist, und
dass die ausgegebene Meldung die über
assertion
übergebene Zeichenkette enthält.
Wird eine boolesche Bedingung an
assertion
übergeben, wird diese nicht als Parameter an die
Zusicherungsfunktion, die möglicherweise per
assert_options() Funktion definiert wurde, weitergegeben. Die
Bedingung wird vor dem Aufruf der Handler-Funktion in eine Zeichenkette
umgewandelt, und der boolesche Wert false
wird dabei zur leeren
Zeichenkette konvertiert.
assert() sollte nur zum Debuggen des Codes
verwendet werden. Es kann für Plausibilitätsprüfungen verwendet werden, um
auf Bedingungen zu prüfen, die immer true
sein sollten, und die andernfalls
Programmierfehler anzeigen, oder um auf die Verfügbarkeit bestimmter
Merkmale, wie Erweiterungsfunktionen oder bestimmte Systembeschränkungen und
Eigenschaften, zu prüfen.
Zusicherungen sollten nicht für normale Laufzeitoperationen wie die
Überprüfung von Eingaben verwendet werden. Als Faustregel sollte der Code
immer korrekt funktionieren können, auch wenn die Zusicherungsüberprüfung
deaktiviert ist.
Die Optionen für die assert() können über die Funktion
assert_options() oder durch ini Settings, die in der
Handbuchseite dieser Funktion beschrieben werden, eingestellt werden.
Die Funktion assert_options() und/oder die
ASSERT_CALLBACK
Direktive ermöglicht eine Funktion anzugeben, die
bei fehlschlagender Überprüfung aufgerufen wird.
Callback-Funktionen in Zusammenhang mit
assert() sind nützlich, um beispielsweise
automatisierte Tests durchzuführen, da die Callback-Funktion über
die Information verfügt, von welcher Stelle sie aufgerufen wurde.
Auch wenn diese Information mit anderen Methoden zugänglich ist, macht es die
Verwendung von Zusicherungen viel schneller und leichter!
Die Callback-Funktion wird mit drei Parametern aufgerufen. Der
erste Parameter enthält den Namen des Scripts, in dem
die Überprüfung statt fand, der zweite Parameter die
Zeilennummer, und der dritte Paramter enthält die über
assertion
angegebene Bedingung
(wobei Literale wie 1 oder "zwei" nicht übergeben werden).
Nutzer von PHP 5.4.8 und höher können ebenfalls ein viertes optionales
Argument angeben, das die description
, die an
assert() übergeben wurde, enthält, wenn diese gesetzt
wurde.
Erwartungen (nur PHP 7)
assert() ist in PHP 7 ein Sprachkonstrukt, das die
Definition von Annahmen ermöglicht: Zusicherungen, die in Entwicklungs- und
Testumgebungen wirken, aber so optimiert werden, dass sie in
Produktionsumgebungen keinen Mehraufwand verursachen.
Während assert_options() noch immer verwendet werden kann,
um das oben beschriebene Verhalten aus Gründen der Abwärtskompatibilität zu
steuern, sollte Code, der nur für PHP 7 geschrieben wird, die beiden
neuen Konfigurationsoptionen zur Steuerung von assert()
verwenden, und nicht assert_options() aufrufen.
PHP 7 Konfigurationsdirektiven für assert()
Direktive |
Vorgabewert |
Mögliche Werte |
zend.assertions
|
1 |
-
1 : erzeugt Code und führt ihn aus (Entwicklungsmodus)
-
0 : erzeugt Code, aber führt ihn zur Laufzeit nicht aus
-
-1 : erzeugt keinen Code (Produktionsmodus)
|
assert.exception
|
0 |
-
1 : löst eine Exception aus, wenn die Zusicherung
fehlschlägt; entweder das Objekt, das als
exception übergeben wurde, oder ein neues
AssertError Objekt, wenn
exception nicht angegeben wurde.
-
0 : verwendet oder erzeugt eine
Throwable Ausnahme wie oben beschrieben, aber
erzeugt nur eine Warnung, die auf diesem Objekt basiert, anstatt eine
Exception auszulösen (kompatibel zum Verhalten unter PHP 5).
|