php check if method overridden in child class
oop, overloading, php
Solution
Check if the declaring class matches the class of the object:
$reflector = new \ReflectionMethod($ob, 'createTable');
$isProto = ($reflector->getDeclaringClass()->getName() !== get_class($ob));
PHP Manual links:
- ReflectionMethod
- ReflectionProperty
Problem
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.