2010-02-21 10 views

risposta

19

Perché controlla __isset anziché recuperarlo utilizzando __get.

È un'opzione molto migliore per chiamare __isset, in quanto non esiste uno standard su ciò che è vuoto. Forse nel contesto della classe null è un valore accettabile. Si potrebbe anche avere una classe che, se il membro non esistesse, ha restituito un nuovo oggetto vuoto, che si romperebbe isset($myObj->item) come in quel caso verrebbe sempre restituito true.

0

La funzione magica __get viene chiamata solo quando si tenta di accedere a una proprietà che non esiste. Controllare se esiste una proprietà non è come recuperarla.

1

No, __get non deve essere attivato quando si tenta di determinare se una proprietà è impostata: testare se una proprietà è impostata non è la stessa cosa che provare a ottenere il suo valore.

Utilizzando isset innesca il metodo __isset magia.

See:

+0

Sembra che non abbia definito __isset nel mio esempio? – ORM

+0

Sembra che non l'abbia fatto, anzi - ma, se l'avessi definito, avrebbe dovuto essere chiamato ;; e la sua definizione o meno non cambia nulla riguardo al fatto che '__get' non venga chiamato quando stai testando se una proprietà è impostata. –

2

semplicemente non è; puoi invece usare __isset. Questo è disposto here.

0
Class A{ 
    public function __get($key){ 
     ... 
    } 
    public function __set($key,$name){ 
     ... 
    } 
    public function __unset($key){ 
     ... 
    } 
    public function __isset($key){ 
     ... 
    } 
} 
$obj = new A(); 
$get = $obj->newproperty;//$obj->__get("newproperty") 
$obj->newproperty = "X";//$obj->__set("newproperty","X") 
$bool = isset($obj->newproperty);//$obj->__isset("newproperty") 
unset($obj->newproperty);//$obj->__unset("newproperty")