2012-08-02 27 views
11

Siento que me falta algo aquí. He estado usando la función empty() de PHP durante bastante tiempo para determinar si una variable está vacía. Quería usarlo para determinar si la propiedad de un objeto está vacía, pero de alguna manera no funciona. Aquí está una clase simplificada para ilustrar el problemaDeterminar si la propiedad del objeto está vacía

// 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"; 
} 

Así que, básicamente, el objeto $person debe tener un valor (5) en su propiedad número. Como habrás adivinado, el problema es que php repite "está vacío". ¡¡¡Pero no lo es!!!

Sin embargo, funciona si almaceno la propiedad en una variable, luego la evalúo.

Entonces, ¿cuál sería la mejor manera de determinar si una propiedad del objeto está vacía? Gracias.

Respuesta

0

Compruebe si el valor de retorno es null en su lugar. Debería darte la respuesta correcta.

18

Necesita implementar __isset() método mágico.

__isset() se desencadena al llamar a isset() o empty() en propiedades inaccesibles.

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

Me encanta cuando publico una respuesta correcta, pero alguien publica una respuesta que es más correcta. +1 – Fluffeh

+0

Probablemente sea ... usted persona inteligente ... – blee908

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

/* OR */ 

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

Poner() alrededor del objeto-> Valor de la propiedad obligará a ser evaluados antes de llamar a vacío.

+0

Aviso: Propiedad indefinida: Persona :: $ número –

+0

@BradKent, debido a la evaluación, recibe un aviso por tratar de usar una variable indefinida (propiedad valor). Si existe la posibilidad de que su propiedad sea nula/indefinida, primero deberá verificar isset. (! Isset ($ persona-> nada) || vacío (($ persona-> nada))) –

Cuestiones relacionadas