Signatur
Beschreibung
uopz_allow_exit gehört zur UOPZ-Extension (User Operations) und steuert, ob ein Aufruf von exit() oder die() tatsächlich den PHP-Prozess beendet. Ist der Exit-Opcode deaktiviert (d. h. $allow = false), wird exit() still ignoriert, ohne eine Exception zu werfen oder den Prozess zu stoppen.
Diese Funktion ist primär für Unit-Tests gedacht, bei denen zu testender Code intern exit() aufruft. Ohne diese Möglichkeit würde der gesamte Testlauf abgebrochen. Mit uopz_allow_exit(false) kann der Code sicher ausgeführt werden, ohne den Prozess zu beenden.
Nach dem Test sollte uopz_allow_exit(true) aufgerufen werden, um den ursprünglichen Zustand wiederherzustellen, damit spätere Aufrufe von exit() wieder normal funktionieren.
Wichtig: Die Funktion steht nur zur Verfügung, wenn die UOPZ-Extension installiert und geladen ist. Sie ist nicht Bestandteil der PHP-Standardbibliothek.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $allow Pflicht | bool | Wenn true, wird exit()/die() wieder normal ausgeführt. Wenn false, wird der exit-Opcode deaktiviert und Aufrufe von exit() werden ignoriert. |
Rückgabewert
Beispiele
exit() in einem Unit-Test unterdrücken
<?php
// UOPZ-Extension muss geladen sein
function doSomethingAndExit(): void {
echo "Vor exit\n";
exit(1);
echo "Nach exit\n"; // wird nie erreicht
}
// exit-Opcode deaktivieren
uopz_allow_exit(false);
doSomethingAndExit(); // exit() wird ignoriert
echo "Test läuft weiter\n";
// exit-Opcode wieder aktivieren
uopz_allow_exit(true);
Verwendung in einem PHPUnit-Test
<?php
use PHPUnit\Framework\TestCase;
class ExitTest extends TestCase
{
public function setUp(): void
{
// exit() während des Tests verhindern
uopz_allow_exit(false);
}
public function tearDown(): void
{
// exit() nach dem Test wieder erlauben
uopz_allow_exit(true);
}
public function testFunctionThatCallsExit(): void
{
// Funktion, die intern exit() aufruft
myFunctionThatCallsExit();
// Der Test läuft weiter, da exit() unterdrückt wurde
$this->assertTrue(true);
}
}
// Wichtig · Fallstricke
Fallstricke:
- Wird
uopz_allow_exit(false)gesetzt und vergessen, anschließend wiedertruezu setzen, führen alle nachfolgendenexit()-Aufrufe im Prozess nicht mehr zur Beendigung. Dies kann in Produktionsumgebungen zu unerwartetem Verhalten führen. - Die Funktion wirkt global auf den gesamten PHP-Prozess, nicht nur auf den aktuellen Scope.
- In der UOPZ-Extension ab Version 6.x kann das Verhalten leicht abweichen; es empfiehlt sich, die Dokumentation der installierten UOPZ-Version zu prüfen.
- UOPZ ist eine reine Entwicklungs- und Test-Extension und sollte niemals in Produktionsumgebungen eingesetzt werden.