Проверка, существует ли переопределенный родительский метод прежде, чем назвать его

Как я пошел бы об обеспечении, что переопределенный родительский метод существует, прежде чем я назову его?
Я попробовал это:

public function func() {
    if (function_exists('parent::func')) {
        return parent::func();
    }
}

Однако function_exists никогда не оценивает к истинному.

18
задан Charles 24 December 2012 в 21:41
поделиться

2 ответа

Сделать это можно следующим образом:

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

7
ответ дан 30 November 2019 в 07:38
поделиться
<?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 , но это будет вопрос введения простого цикла.

0
ответ дан 30 November 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: