Is it possible to check whether or not a method has been overridden by a child class in PHP?
<!-- language: lang-php -->
class foo {
protected $url;
protected $name;
protected $id;
var $baz;
function __construct($name, $id, $url) {
$this->name = $name;
$this->id = $id;
$this->url = $url;
}
function createTable($data) {
// do default actions
}
}
Child class:
class bar extends foo {
public $goo;
public function createTable($data) {
// different code here
}
}
When iterating through an array of objects defined as members of this class, how can I check which of the objects has the new method as opposed to the old one? Does a function such as method_overridden(mixed $object, string $method name)
exist?
foreach ($objects as $ob) {
if (method_overridden($ob, "createTable")) {
// stuff that should only happen if this method is overridden
}
$ob->createTable($dataset);
}
I am aware of the template method pattern, but let's say I want the control of the program to be separate from the class and the methods themselves. I would need a function such as method_overridden
to accomplish this.
To get this information, you have to use ReflectionClass. You could try getMethod and check the class name of the method.
But keep in mind, that reflection isn't very fast, so be careful with usage.
Check if the declaring class matches the class of the object:
PHP Manual links: