Serialisierung von Objekten und schwerwiegenden Fehlern
-
28-09-2019 - |
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 )
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.