Как я могу сравнить объект с родительским классом в php?

StackOverflow https://stackoverflow.com/questions/1577004

  •  21-09-2019
  •  | 
  •  

Вопрос

Я хочу сравнить класс объекта с текущим классом и в унаследованных методах ссылаться на родительский класс.Это единственный способ, которым я могу это сделать:

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 ссылается на родительский класс в унаследованных методах, но создавать экземпляр класса каждый раз, когда я хочу провести сравнение, кажется излишним.

Есть ли более простой способ?

Это было полезно?

Решение

Вы можете использовать __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

Это очень полезно, если вы хотите убедиться, что класс реализует интерфейс или расширяет абстрактный класс (например, для плагинов, адаптеров и т. д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top