Frage

Kann jemand mir erklären, warum in der Sitzung in diesem Fall erhalten wir das Objekt mit 2 Eigenschaften?

set_error_handler('my_error_handler');

session_start();

$obj = new myclass();

$_SESSION['obj'] = $obj;

$a->b();

class myclass
{
    private $a = 1;
    private $b = 2;

    public function __sleep()
    {
        return array('a');
    }
}

function my_error_handler($code, $error, $file = NULL, $line = NULL)
{
    throw new ErrorException($error, $code, 0, $file, $line);
}

UPD : hier erwarte ich zu bekommen:
1. fataler Fehler ( übergeben )
2. Objekt in der Sitzung (in Session-Datei ) mit 1 Eigenschaft ( ist fehlgeschlagen )

War es hilfreich?

Lösung

Der Grund dafür ist, dass ein schwerwiegender Fehler ist, na ja, fatal zum Motor. Nachdem sie rufen kann der Motor nicht mehr funktioniert.

Damit in php_var_serialize_intern die Aufruf __sleep ausfällt. Wie Sie sehen können, müssen Sie nicht einen fatalen Fehler benötigen, wenn __sleep eine Ausnahme geworfen hatte, oder ob es überhaupt nicht __sleep Rückruf ist, würde das Verhalten ähnlich sein.

Insbesondere das Verhalten ist es, alle Eigenschaften der Instanz der Variablen abzurufen, und die resultierende Hash-Tabelle zu serialisieren, als ob es auf ein Array gehörte.

Ich denke, das ein gültiger Ansatz ist, aber vielleicht denken Sie, dass, wenn der Anruf zu __sleep fehlschlägt, sollte die Serialisierung nur scheitern. Sie können versuchen, eine Feature-Anfrage einreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top