Start · Sprachen · PHP · Referenz · uopz_allow_exit

uopz_allow_exit

Funktion

Erlaubt oder verhindert die Ausführung des <code>exit</code>/<code>die</code>-Opcodes im laufenden PHP-Prozess.

seit PHP 5.1.0 Kategorie: misc

Signatur

uopz_allow_exit(bool $allow): void

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

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

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);
Vor exit Test läuft weiter

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 wieder true zu setzen, führen alle nachfolgenden exit()-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.