Start · Sprachen · PHP · Referenz · uopz_get_exit_status

uopz_get_exit_status

Funktion

Gibt den zuletzt per <code>exit()</code> oder <code>die()</code> gesetzten Exit-Status zurück, wenn der Exit durch uopz abgefangen wurde.

seit PHP 5.1.0 Kategorie: misc

Signatur

uopz_get_exit_status(): int|null

Beschreibung

uopz_get_exit_status() ist Bestandteil der uopz-Erweiterung (User Operations for Zend), die primär für Unit-Tests und Mocking konzipiert ist. Die Funktion ermöglicht es, den Statuscode abzufragen, der zuletzt an exit() oder die() übergeben wurde – jedoch nur dann, wenn der tatsächliche Programmabbruch durch uopz_allow_exit(false) zuvor deaktiviert wurde.

Normalerweise beendet ein Aufruf von exit() den PHP-Prozess sofort, was in automatisierten Tests zu Problemen führt. Mit uopz kann dieses Verhalten unterdrückt werden: Das Skript läuft weiter, und der übergebene Exit-Code wird intern gespeichert. uopz_get_exit_status() liest diesen gespeicherten Wert aus, sodass Tests prüfen können, ob und mit welchem Status ein Exit aufgerufen wurde.

Die Funktion ist besonders nützlich beim Testen von Code, der im Fehlerfall mit einem bestimmten Exit-Code abbricht, etwa CLI-Skripte, Bootstrapper oder Fehler-Handler. Ohne uopz wäre ein solcher Test nicht möglich, ohne den Prozess tatsächlich zu beenden.

Hinweis: Die uopz-Erweiterung muss installiert und geladen sein. Sie ist nicht Teil der PHP-Standardinstallation und sollte ausschließlich in Testumgebungen eingesetzt werden.

Rückgabewert

Typ
int|null
Beschreibung
Gibt den zuletzt per exit() oder die() gesetzten Statuscode als int zurück. Wurde noch kein Exit abgefangen oder ist kein Statuscode vorhanden, wird null zurückgegeben.

Beispiele

Exit-Status in einem Unit-Test abfangen

<?php
// uopz muss geladen sein: extension=uopz

// Verhindert, dass exit() den Prozess tatsächlich beendet
uopz_allow_exit(false);

// Zu testender Code, der exit() aufruft
function run_application(): void {
    // Simuliert einen Fehler
    exit(1);
}

run_application();

$status = uopz_get_exit_status();

if ($status === 1) {
    echo "Test bestanden: Exit-Status ist 1." . PHP_EOL;
} else {
    echo "Test fehlgeschlagen: Unerwarteter Exit-Status: " . var_export($status, true) . PHP_EOL;
}

// Exit wieder erlauben
uopz_allow_exit(true);
Test bestanden: Exit-Status ist 1.

Kein Exit aufgerufen – Rückgabe null

<?php
// uopz muss geladen sein: extension=uopz

uopz_allow_exit(false);

// Kein exit()-Aufruf erfolgt hier

$status = uopz_get_exit_status();

var_dump($status); // NULL, da kein Exit abgefangen wurde

uopz_allow_exit(true);
NULL

// Wichtig · Fallstricke

Achtung: Die uopz-Erweiterung ist ausschließlich für Entwicklungs- und Testumgebungen gedacht. Sie sollte niemals in einer Produktionsumgebung eingesetzt werden, da sie das Laufzeitverhalten von PHP grundlegend verändern kann.

Damit uopz_get_exit_status() einen sinnvollen Wert liefert, muss zuvor uopz_allow_exit(false) aufgerufen worden sein – andernfalls beendet exit() den Prozess, bevor der Status gespeichert werden kann.

Wird exit() mit einem String-Argument aufgerufen (z.B. exit('Fehler!')), so wird dieser String ausgegeben, aber kein Integer-Statuscode gesetzt; uopz_get_exit_status() liefert in diesem Fall null oder 0, je nach Version.