У меня есть базовый класс с функцией и несколько классов, производных от базового класса. Некоторые из этих производных классов переопределяют функцию, некоторые нет.
Есть ли способ проверить, переопределил ли конкретный объект, который, как известно, является одним из производных классов, эту функцию?
Пример:
<?php
class BaseThing
{
function Bla() { echo "Hello, this is the base class\n"; }
}
class DerivedThing extends BaseThing
{
function Bla() { echo "Hello, this is a derived class\n"; }
}
class AnotherDerivedThing extends BaseThing
{
// Does not override Bla()
}
$a = new BaseThing();
$b = new DerivedThing();
$c = new AnotherDerivedThing();
$a->Bla(); // prints base class
$b->Bla(); // prints derived class
$c->Bla(); // prints base class
if (method_exists($b,'Bla')) echo "Method 'Bla' exists in DerivedThing\n";
if (method_exists($c,'Bla')) echo "Method 'Bla' exists in AnotherDerivedThing\n";
?>
Я попытался использовать method_exists
, но, по-видимому, он говорит, что $c
содержит метод, потому что он унаследован от класса, который его выполняет.
Есть ли способ проверить, перекрывает ли объект определенную функцию? Например, могу ли я как-то обнаружить, что $b
переопределяет функцию Bla()
, а $c
- нет?