2010-08-08 21 views
53

He leído en php docs que isset() es más rápido que property_exists() y debemos utilizar una combinación de ambos comoComprobando si existe la propiedad

if (isset($this->fld) || property_exists($this, 'fld')) { 

Pero ¿por qué no puedo simplemente usar isset entonces?

if (isset($this->fld)) { 

Respuesta

73

Debido property_exists le dirá si es incluso una propiedad definida de la clase/objeto en el que duerma como isset hacer esa distinción. por ejemplo:

class A { 
    protected $hello; 
} 

class B { 

} 

usando property_exists($this, 'hello') en clase A volverá true, mientras que la usa en clase B volverá false. isset devolverá false en ambas instancias.

+1

Buena respuesta +1 :-) – streetparade

5

Depende de cómo se realice su programa, pero si lee los comentarios en el manual lo ayudará a explicar la idiosincrasia de una función.

http://php.timesoft.cc/manual/en/function.property-exists.php

La parte importante es aquí:

La documentación deja fuera el caso importante de nuevas propiedades que añada a objetos en tiempo de ejecución. De hecho, property_exists devolverá true si lo pregunta sobre tales propiedades.

+3

también prefiero isset para probar si una propiedad no está vacía – streetparade

Cuestiones relacionadas