Как я могу сравнить объект с родительским классом в php?
Я хочу сравнить класс объекта с текущим классом и в унаследованных методах сослаться на родительский класс. Это единственный способ сделать это:
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
Это работает, потому что self ссылается на родительский класс в унаследованных методах, но кажется чрезмерным необходимость создавать экземпляр класса каждый раз, когда я хочу сделать сравнение.
Есть ли более простой способ?
2 ответа
Решение
Ты можешь использовать __CLASS__
магическая константа:
return get_class($obj) == __CLASS__;
Или даже просто используйте get_class() без аргументов:
return get_class($obj) == get_class();
Да, определенно, но остерегайтесь наследства.
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
Это очень полезно, если вы хотите убедиться, что класс реализует интерфейс или расширяет абстрактный класс (например, для плагинов, адаптеров, ...)