2009-12-27 9 views

Respuesta

59

Usted puede utilizar el operador instanceof, para comprobar si un objeto es una instancia de:

  • Una clase
  • O una clase hija de esa clase
  • O una instancia de una clase que implementa una interfaz

Lo que significa que no se puede usar para detectar si su objeto es una instancia de una clase specific, ya que dirá "sí" si su objeto es una instancia de una clase hija de esa clase.


Por ejemplo, esta porción de código:

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

Le conseguirá este resultado:

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

$a, en cierto modo, es una instancia de ClassA, como ClassB es una clase de niño de ClassA.

Y, por supuesto, $a es también una instancia de ClassB - vea la línea donde se instancia.

+0

+1 para una explicación más detallada. –

+0

@Pekka: Gracias ;-) He editado de nuevo, para proporcionar un ejemplo ^^ –

+0

como es habitual de Pascal, respuesta de gran calidad. Gracias hombre. – openfrog

4

No puede verificar el valor devuelto, pero puede verificar la clase de la que se devuelve usando 'instanceof'. (De manera similar, puede encontrar 'get_class' útil.)

6

Puede usar el operador instanceof o la función is_a.

is_a es útil si desea pasar una cadena con el nombre de la clase (en una base de código más dinámica).

Cuestiones relacionadas