Réaction inattendue de Empty

codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 20 mai 2008 à 17:48
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 20 mai 2008 à 21:33
Yop tout le monde :)
J'ai un drole de soucis avec la fonction empty, j'aimerai comprendre pourquoi.

Voici ma situation.
J'ai une classe de ce genre :

<?php
class Values {
    private $_aValues = array ();
   
    public function __set ($sKey, $mValue) {
        $this->_aValues[$sKey] = $mValue;
    }
   
    public function __get ($sKey) {
        if (isset ($this->_aValues[$sKey]))
            return (is_string ($this->_aValues[$sKey])) ? utf8_encode ($this->_aValues[$sKey]) : $this->_aValues[$sKey];
       
        return null;
    }
}
?>

Ensuite je fait des
<?php
$mc = new Values ();
$mc->val1 = "val1";
$mc->val2 = "val2";
$mc->val3 = "";
?>

Maintenant, un var_dump (empty ($mc->val1)); me retourne TRUE.

Pourquoi ?????

Merci de votre aide :)

http://www.ReFlectiv.Net

5 réponses

nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
20 mai 2008 à 18:16
Salut,

As tu mis la condition avant ou après :

$mc = new Values ();
$mc->val1 = "val1";
$mc->val2 = "val2";
$mc->val3 = "";

car si tu l'a mis avant la valeur n'est pas encore assigné par contre si tu l'a mis après très bonne question a laquelle je n'ai pas de réponse pour l'instant !

a++
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
20 mai 2008 à 18:22
Elle à été mise apres :)
si je fait
<?php
var_dump ($mc->val1); // j'obtiens string (4) "val1"
// Puis ensuite :
var_dump (empty ($mc->val1)); // j'obtiens boolean (true)
?>

http://www.ReFlectiv.Net
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
20 mai 2008 à 18:59
ba je sais pas alors, désolé !

Je suis sur que tu va trouver une solution ;-)

a++
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
20 mai 2008 à 19:41
Hello,

tu n'as jamais eu une erreur disant "cannot use function return in write context" ou un truc dans le genre ? Par exemple si tu fais :
empty(trim('toto'));
Ca ne marchera pas.
C'est pareil pour un getter. empty() n'est pas capable de traiter un retour de fonction dans certains contextes. Sauf que là, tu n'as pas d'erreur et empty() renvoie true en effet. J'en ai déjà fait l'expérience. La seule parade est d'assigner les propriétés "gettées" à une variable tierce pour l'utiliser dans le empty.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
20 mai 2008 à 21:33
C'est ce qui me semblait. J'ai testé un appel de fonction dans le empty et j'ai eu cette erreur de "cannot use function return in write context".
En passant par une variable tierce, empty fonctionnait. Bon du coup je fait un if ($mc->val1 != '') et hop ca marche.

Bon alors il n'y a pas de solutions :)

Merci de vos aides :)

http://www.ReFlectiv.Net
0
Rejoignez-nous