2012-08-02 3 views
11

Je sens qu'il me manque quelque chose ici. J'utilise depuis longtemps la fonction empty() de PHP pour déterminer si une variable est vide. Je voulais l'utiliser pour déterminer si la propriété d'un objet est vide, mais de toute façon cela ne fonctionne pas. Voici une classe simplifiée pour illustrer le problèmeDéterminer si la propriété de l'objet est vide

// The Class 
class Person{ 
    private $number; 

    public function __construct($num){ 
     $this->number = $num; 
    } 

    // this the returns value, even though its a private member 
    public function __get($property){ 
     return intval($this->$property); 
    } 
} 

// The Code  
$person = new Person(5); 

if (empty($person->number)){ 
    echo "its empty"; 
} else { 
    echo "its not empty"; 
} 

Donc, fondamentalement, l'objet $person doit avoir une valeur (5) dans sa propriété numéro. Comme vous l'avez peut-être deviné, le problème est que php fait écho "son vide". Mais ce n'est pas!!! Cependant, cela fonctionne si je stocke la propriété dans une variable, puis que je l'évalue.

Alors, quelle serait la meilleure façon de déterminer si une propriété d'objet est vide? Je vous remercie.

Répondre

0

Vérifiez à la place si la valeur de retour est null. Devrait vous donner la bonne réponse.

18

Vous devez implémenter la méthode magique __isset().

__isset() est déclenché en appelant isset() ou empty() sur les propriétés inaccessibles.

public function __isset($property){ 
    return isset($this->$property); 
} 
+3

Je l'aime quand je poste une réponse qui est correcte, mais quelqu'un publie une réponse qui est plus correcte. +1 – Fluffeh

+0

Ceci est probablement la personne intelligente que vous ... – blee908

0
if (empty(($person->number))) 

/* OR */ 

if (!isset($person->nothing) || empty(($person->nothing))) 

Putting() autour de la Object-> Valeur de la propriété forcera à évaluer avant d'appeler vide.

+0

Remarque: Propriété indéfinie: Personne :: $ number –

+0

@BradKent, En raison de l'évaluation, vous obtenez un avis pour essayer d'utiliser une variable indéfinie (propriété valeur). S'il y a une possibilité que votre propriété soit éventuellement null/indéfinie, vous devez d'abord vérifier isset. (! Isset ($ person-> rien) || vide (($ person-> rien))) –

Questions connexes