Question

Quelqu'un peut-il me expliquer, pourquoi lors de la séance dans ce cas, nous obtenons l'objet avec 2 propriétés?

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 : ici je vous attendre à obtenir:
1. erreur fatale ( passé )
2. objet en session ( fichier de session ) 1 propriété ( a échoué )

Était-ce utile?

La solution

La raison est qu'une erreur fatale est, bien, fatale au moteur. Après cela, le moteur ne peut pas appeler plus de fonctions.

Par conséquent, dans la php_var_serialize_intern appel à __sleep échoue. Comme vous pouvez le voir, vous n'avez pas besoin d'une erreur fatale, si __sleep avait jeté une exception, ou s'il n'y avait pas de rappel __sleep du tout le comportement serait similaire.

En particulier, le comportement est de récupérer toutes les propriétés d'instance de la variable et de sérialisation la table de hachage comme si elle appartenait à un tableau.

Je pense que cette approche est valable, mais peut-être que vous pensez que si l'appel à __sleep échoue, la sérialisation doit échouerait. Vous pouvez essayer de soumettre une demande de fonctionnalité .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top