Réaction inattendue de Empty

Signaler
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
-
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
-
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

Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
32
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++
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
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
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
32
ba je sais pas alors, désolé !

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

a++
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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.
Messages postés
1123
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
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