2010-04-27 8 views
1

Peut-être que je pose une question stupide, mais je ne peux pas comprendre ce comportement:vide() comportement

<?php 
    $this->meeting->google_id = 'test'; 
    $test = $this->meeting->google_id; 
    var_dump(empty($test)); 
    var_dump(empty($this->meeting)); 
    var_dump(empty($this->meeting->google_id)); 
?> 

donne sortie:

bool(false) bool(false) bool(true) 

Pourquoi le résultat de empty($this->meeting->google_id); est vrai? Et comment dois-je vérifier cette propriété alors?

Répondre

3

Lire ici: http://www.php.net/manual/en/function.empty.php#93117

Fondamentalement, PHP magic methods entraînant un comportement inattendu.

Vous pouvez lire/écrire dans les membres virtuels d'une classe si la classe a une méthode magique spéciale __get. La valeur réelle, cependant, ne peut pas être vérifiée par la méthode magique __isset (qui est ce que empty utilise), car ce n'est pas un membre explicite de la classe.

+1

Si vous n'avez pas fini de lire (ce que certaines personnes ont tendance à ne pas faire): vous pouvez toujours écrire votre propre méthode '__isset', que le même poste offre le plus courtoisement. :) – animuson

+0

+1 pour avoir mentionné la méthode magique __isset ... clairement je n'ai jamais fini de lire la page des méthodes magiques après __get, __set et __call ;-) – richsage