Как я пошел бы об обеспечении, что переопределенный родительский метод существует, прежде чем я назову его?
Я попробовал это:
public function func() {
if (function_exists('parent::func')) {
return parent::func();
}
}
Однако function_exists никогда не оценивает к истинному.
Сделать это можно следующим образом:
if (method_exists(get_parent_class($this), 'func')) {
// method exist
} else {
// doesn't
}
http://php.net/manual/en/function.method-exists.php
http://php.net/manual/en/function.get-parent-class.php
<?php
class super {
public function m() {}
}
class sub extends super {
public function m() {
$rc = new ReflectionClass(__CLASS__);
$namepc = $rc->getParentClass()->name;
return method_exists($namepc, __FUNCTION__);
}
}
$s = new sub;
var_dump($s->m());
дает bool (true)
. Не уверен, что это сработает, если метод был определен в суперклассе super
, но это будет вопрос введения простого цикла.