Intereting Posts

Проверка php, если метод переопределен в дочернем классе

Можно ли проверить, был ли метод переопределен дочерним классом в 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 } } 

Класс ребенка:

 class bar extends foo { public $goo; public function createTable($data) { // different code here } } 

При повторении через массив объектов, определенных как члены этого класса, как я могу проверить, какой из объектов имеет новый метод, а не старый? Существует ли такая функция, как method_overridden(mixed $object, string $method name) ?

 foreach ($objects as $ob) { if (method_overridden($ob, "createTable")) { // stuff that should only happen if this method is overridden } $ob->createTable($dataset); } 

Я знаю шаблон шаблона метода , но, допустим, я хочу, чтобы управление программой было отделено от класса и самих методов. Для этого мне понадобится функция, например method_overridden .

Проверьте, соответствует ли класс объявления классу объекта:

 $reflector = new \ReflectionMethod($ob, 'createTable'); $isProto = ($reflector->getDeclaringClass()->getName() !== get_class($ob)); 

Чтобы получить эту информацию, вы должны использовать ReflectionClass. Вы можете попробовать getMethod и проверить имя класса метода.

 $class = new ReflectionClass($this); $method = $class->getMethod("yourMethod"); if ($method->class == 'classname') { //.. do something } 

Но имейте в виду, что отражение не очень быстрое, поэтому будьте осторожны с использованием.