2010-08-08 15 views
53

ho letto su php docs che isset() è più veloce di property_exists() e dovremmo usare una combinazione di entrambi comeTesting se proprietà esiste

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

Ma perché non posso semplicemente usare isset allora?

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

risposta

73

Perché property_exists vi dirà se anche una proprietà definita della classe/oggetto in cui come isset non rende questa distinzione. ad esempio:

class A { 
    protected $hello; 
} 

class B { 

} 

utilizzando property_exists($this, 'hello') in classe A tornerà true, mentre lo si utilizza in classe B tornerà false. isset restituirà false in entrambe le istanze.

+1

Buona risposta +1 :-) – streetparade

5

Dipende dal modo in cui è stato eseguito il programma, ma se si leggono i commenti nel manuale, questo aiuterà a spiegare le idiosincrasie di una funzione.

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

La parte importante è qui:

La documentazione lascia fuori l'importante caso di nuove proprietà si aggiungono agli oggetti in fase di esecuzione . Infatti, proprietà_risultato restituirà true se si chiede su tali proprietà.

+3

preferisco anche isset per verificare se una proprietà non è vuota – streetparade