Start · Sprachen · PHP · Referenz · LuaSandboxErrorError

LuaSandboxErrorError

Klasse

Repräsentiert einen Fehler, der beim Verarbeiten eines Lua-Fehlerobjekts in der LuaSandbox-Erweiterung auftritt.

seit PHP 1.0.0 Kategorie: error

Signatur

class LuaSandboxErrorError extends LuaSandboxError

Beschreibung

LuaSandboxErrorError ist eine spezielle Ausnahme-Klasse der LuaSandbox-Erweiterung und wird geworfen, wenn PHP selbst beim Verarbeiten oder Serialisieren eines Lua-Fehlerobjekts auf ein Problem stößt. Dies tritt typischerweise auf, wenn Lua eine Ausnahme wirft, die ein nicht serialisierbares oder anderweitig problematisches Objekt enthält.

Die Klasse erbt von LuaSandboxError, welche wiederum von Exception ableitet. Sie bildet damit den untersten Sonderfall in der Fehlerhierarchie der LuaSandbox-Erweiterung und sollte dediziert abgefangen werden, wenn eine robuste Fehlerbehandlung beim Aufruf von Lua-Funktionen erforderlich ist.

In der Praxis empfiehlt es sich, beim Aufruf von Lua-Code zunächst LuaSandboxErrorError und dann allgemeiner LuaSandboxError oder Exception abzufangen, um eine differenzierte Behandlung von Fehlern beim Fehlerhandling selbst zu ermöglichen.

Beispiele

LuaSandboxErrorError gezielt abfangen

<?php
// LuaSandbox-Erweiterung muss installiert sein (PECL luasandbox)
$sandbox = new LuaSandbox();
$sandbox->setMemoryLimit(64 * 1024 * 1024);
$sandbox->setCPULimit(2);

try {
    // Lua-Code, der ein nicht verarbeitbares Fehlerobjekt erzeugt
    $sandbox->loadString("error({})");
    $sandbox->callFunction('__main');
} catch (LuaSandboxErrorError $e) {
    // Fehler beim Verarbeiten des Lua-Fehlerobjekts selbst
    echo "Fehler beim Verarbeiten des Lua-Fehlers: " . $e->getMessage() . PHP_EOL;
} catch (LuaSandboxError $e) {
    // Allgemeiner Lua-Fehler
    echo "Lua-Fehler: " . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
    echo "Unbekannter Fehler: " . $e->getMessage() . PHP_EOL;
}
Fehler beim Verarbeiten des Lua-Fehlers: ...

Fehlerhierarchie prüfen

<?php
// Prüfen, ob LuaSandboxErrorError korrekt von LuaSandboxError erbt
$reflection = new ReflectionClass(LuaSandboxErrorError::class);
echo $reflection->getName() . PHP_EOL;
echo $reflection->getParentClass()->getName() . PHP_EOL;
echo $reflection->getParentClass()->getParentClass()->getName() . PHP_EOL;
LuaSandboxErrorError LuaSandboxError Exception

// Wichtig · Fallstricke

Hinweis zur Erweiterung: LuaSandboxErrorError ist nur verfügbar, wenn die PECL-Erweiterung luasandbox installiert ist. Sie ist nicht Bestandteil der PHP-Kerninstallation.

Typischer Auslöser: Diese Ausnahme wird speziell dann geworfen, wenn Lua einen Fehler signalisiert, dessen Fehlerobjekt selbst nicht sicher in eine PHP-kompatible Darstellung überführt werden kann (z. B. ein Lua-Table als Fehlerobjekt). In solchen Fällen kann der ursprüngliche Lua-Fehler nicht vollständig rekonstruiert werden.

Reihenfolge beim Fangen: Immer LuaSandboxErrorError vor LuaSandboxError abfangen, da erstere eine Unterklasse der letzteren ist und sonst nicht dediziert behandelt wird.