Pregunta

Quiero comparar la clase de un objeto con la clase actual, y en los métodos para referirse a la clase padre heredó. Esta es la única manera que puedo pensar de hacerlo:

class foo { function compare($obj) { return get_class($obj) == get_class(new self); } }
class bar extends foo { }

$foo = new foo;
$foo->compare(new foo); //true
$foo->compare(new bar); //false
$bar = new bar;
$bar->compare(new foo); //true
$bar->compare(new bar); //false

Esto funciona porque uno mismo se refiere a la clase de los padres en los métodos heredados, pero parece excesiva a tener que crear una instancia de una clase cada vez que quiera hacer una comparación.

¿Hay una manera más sencilla?

¿Fue útil?

Solución

Se puede utilizar __CLASS__ constante mágica :

return get_class($obj) == __CLASS__;

O incluso sólo tiene que utilizar get_class () sin argumentos:

return get_class($obj) == get_class();

Otros consejos

Sí, sin duda, pero ten cuidado de la herencia.

class Foo;
class Bar extends Foo;

$foo = new Foo();
if($foo instanceof Foo) // true
if($foo instanceof Bar) // false

$bar = new Bar();
if($bar instanceof Foo) // true
if($bar instanceof Bar) // true

Es muy útil si desea asegurarse de que implementa una clase o una interfaz extiende la clase abstracta (es decir, para los plugins, adaptadores, ...)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top