2008-11-07 11 views
1

Existe-t-il un moyen intégré de savoir si une variable de session donnée est un objet sérialisé? Dites que je récupère une valeur comme $ _SESSION ['foo'], mais je ne sais pas si c'était à l'origine une chaîne ou s'il s'agit d'un objet sérialisé. Existe-t-il un moyen de vérifier, ou une fois que sérialisé PHP voit juste une chaîne comme une chaîne comme une chaîne?Vérification des objets sérialisés

Répondre

3

C'est une idée fausse très répandue que vous devez sérialiser manuellement les objets avant de les mettre en session. Ce n'est pas le cas. Vous pouvez simplement assigner une instance d'objet à un emplacement dans $_SESSION, et PHP le sérialisera automagiquement et le désérialisera pour vous, entre les requêtes.

+0

Vraiment? Je ne peux pas croire que je ne le savais pas! – Wilco

+0

En fait, après quelques recherches, je ne suis pas sûr que ce soit correct. Sauf si vous utilisez session_register() sur une instance donnée, il ne sera pas automatiquement sérialisé lors de l'enregistrement dans la session. Je vais essayer de confirmer avec un cas de test pour être sûr à 100% et poster ce que je découvre. – Wilco

+0

Non, c'est tout à fait correct. Et 'session_register' est une ancienne et obsolète façon d'utiliser les sessions - Restez à l'écart de cela. – troelskn

1

Une chaîne est une chaîne. Je pense que le mieux que vous puissiez faire est de simplement essayer de le désérialiser, et si cela fonctionne, cela fonctionne. Si ce n'est pas le cas, ce n'est pas le cas.

La seule autre option serait d'utiliser une regex pour voir si elle "ressemble" à un objet sérialisé. Exécution juste unserialize() là-dessus pourrait cependant être plus facile.

1

Vous pouvez utiliser is_a ... Retirez-le de la session et voyez, vous avez juste besoin de connaître le nom de la classe à vérifier.

if (is_a($_SESSION['foo'], 'UserInfoObject')) { 
    // We have one 
} 

Il ressemble a une méthode PHP5 plus facile:

if ($_SESSION['foo'] instanceof UserInfoObject) { 
     // We have one 
} 

http://www.php.net/manual/en/function.is-a.php

Questions connexes