Signatur
Beschreibung
uopz_set_static() ist Teil der UOPZ-Erweiterung (User Operations for Zend) und ermöglicht es, die statischen Variablen einer Funktion oder Methode zur Laufzeit zu überschreiben. Statische Variablen einer Funktion behalten ihren Wert zwischen Aufrufen – mit uopz_set_static() kann dieser Zustand von außen manipuliert werden.
Die Funktion ist primär für Unit-Tests gedacht, in denen ein definierter Ausgangszustand für statische Variablen benötigt wird, ohne die Funktion selbst zu verändern. So lassen sich Seiteneffekte durch persistent gespeicherte Werte gezielt kontrollieren und reproduzierbare Testszenarien erstellen.
Für Methoden einer Klasse existiert eine Überladung der Funktion: uopz_set_static(string $class, string $function, array $static). In diesem Fall wird die Klasse als erstes Argument übergeben, gefolgt vom Methodennamen und dem Array der neuen statischen Variablenwerte.
Hinweis: UOPZ ist eine Entwicklungs- und Testwerkzeug-Erweiterung und sollte niemals in Produktionsumgebungen eingesetzt werden, da sie tief in den Zend-Engine-Betrieb eingreift.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class | string | Der Name der Klasse, wenn eine Methode angesprochen wird. Wird weggelassen, wenn eine globale Funktion gemeint ist. | |
| $function Pflicht | string | Der Name der Funktion oder Methode, deren statische Variablen gesetzt werden sollen. | |
| $static Pflicht | array | Ein assoziatives Array, das die Namen der statischen Variablen (ohne $) als Schlüssel und die gewünschten neuen Werte als Werte enthält. |
Rückgabewert
Beispiele
Statische Variable einer globalen Funktion zurücksetzen
<?php
function counter(): int {
static $count = 0;
return ++$count;
}
// Mehrfach aufrufen
echo counter(); // 1
echo counter(); // 2
echo counter(); // 3
// Statische Variable zurücksetzen
uopz_set_static('counter', ['count' => 0]);
echo counter(); // 1 (zurückgesetzt)
echo counter(); // 2
Statische Variable einer Klassenmethode manipulieren
<?php
class RequestLogger {
public function logCount(): int {
static $requests = 0;
return ++$requests;
}
}
$logger = new RequestLogger();
echo $logger->logCount(); // 1
echo $logger->logCount(); // 2
// Zähler für Testfall auf einen definierten Wert setzen
uopz_set_static('RequestLogger', 'logCount', ['requests' => 9]);
echo $logger->logCount(); // 10
// Wichtig · Fallstricke
Nur für Entwicklung und Tests: Die UOPZ-Erweiterung (ext/uopz) greift tief in die Zend Engine ein und kann zu unvorhersehbarem Verhalten führen, wenn sie in Produktionssystemen eingesetzt wird. Sie sollte ausschließlich in isolierten Test- oder Entwicklungsumgebungen verwendet werden.
Die Funktion wirft eine RuntimeException, wenn die angegebene Funktion oder Methode nicht existiert. Stellen Sie sicher, dass die Funktion korrekt eingebunden ist, bevor Sie uopz_set_static() aufrufen.
Das Pendant uopz_get_static() erlaubt es, den aktuellen Stand der statischen Variablen auszulesen, was zusammen mit uopz_set_static() ein vollständiges Werkzeug für das Testen statischer Zustände bietet.