Posso verificare se un object è un tipo di class specifica, in PHP?

Esempio: si suppone che un metodo restituisca un'istanza di una class specifica. Come posso controllare quel valore di return se è di quella class?

È ansible utilizzare l'operatore instanceof per verificare se un object è un'istanza di:

  • Una class
  • O una class bambino di quella class
  • O un'istanza di una class che implementa un'interface

Il che significa che non può essere usato per rilevare se il tuo object è un'istanza di una class specific – come dirà "sì" se il tuo object è un'istanza di una class figlio di quella class.

Ad esempio, questa porzione di codice:

 class ClassA {} class ClassB extends ClassA {} $a = new ClassB(); if ($a instanceof ClassA) { echo '$a is an instanceof ClassA<br />'; } if ($a instanceof ClassB) { echo '$a is an instanceof ClassB<br />'; } 

Ti darò questo risultato:

 $a is an instanceof ClassA $a is an instanceof ClassB 

$a , in un certo senso, è un'istanza di ClassA , in quanto ClassB è una class figlio di ClassA .

E, naturalmente, $a è anche un'istanza di ClassB – vedi la linea in cui è instanciata.

È ansible utilizzare l'operatore instanceof o la function is_a .

is_a è utile se vuoi passare una string con il nome della class (in una base di codice più dynamic).

 if ($object instanceof classname) .... 

Manuale: classi e oggetti in PHP5

Non è ansible controllare il valore di return stesso, ma è ansible controllare la class dalla quale viene restituito l'utilizzo di ' instanceof '. (Su una base simile, potresti trovare ' get_class ' utile.)