Узнать, есть ли в классе “рабочие” методы

82
03 сентября 2019, 06:50

Есть класс с методами

class Test {
    public function m1() {
    }
    public function m2() {
    }
}

Есть наследник:

class randomName extends Test {
    /*
    public function m1() {
    }
    public function m2() {
    }
    */
    public function m111() {
    }
    public function m222() {
    }
}

Прошу заметить, что в наследнике сейчас закоменчены методы родителя.

Вопрос: можно ли как-то проверить, что те самые методы не активны? Я хочу это для того, чтобы если не активны (закоменчены или вообще отсутсвуют), т вызвать методы m111 или m222 соответствнно.

Классы рефлексии, is_callable и method_exists не помогают это выявить достоверно. Либо я не понимаю как.

Answer 1

Нашел путь решения на enSO.

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

Суть в чем: проверяется наличие метода createTable в объекте $ob, далее сравнивается имя класса, в котором объявлен метод $reflector->getDeclaringClass()->getName() и имя текущего объекта get_class($ob). Если они совпадают - то значит метод был переопределен, если нет - значит нет (значит например был закоментирован или просто не переопределен)

READ ALSO
Как правильно вывести html через функцию echo

Как правильно вывести html через функцию echo

В теге use идёт ссылка на svg спрайт и эта ссылка "не работает", то есть не задаёт правильный адрес

88
Убрать ненужные пиксели

Убрать ненужные пиксели

Есть небольшой скрипт, он прогоняет через себя все пиксели некоторого изображения, сохраняет в ассоциативный массив цвет пикселя и количество...

109
Исключение на не известную функцию в С++

Исключение на не известную функцию в С++

Подскажите, совсем новичкуНужно сделать исключение вызову функции, которое не поддерживается операционной системой

115
OpenMP. Нетривиальный случай

OpenMP. Нетривиальный случай

Аналог реальной программыКак переместить создание потоков (#pragma omp parallel) в main_, но оставить funcSerial однопоточным (последовательным)? funcSerial я распараллеливать...

85