scottparker
@scottparker

Можно ли определить является метод статическим или нет?

Добрый вечер.
Есть некоторый класс с набором статических и обычных методов.
class MyClass
{
    public static function methodA(){
       ...
    }
    public function methodB(){
       ...
    }
}


Есть массив с названием класса и названием метода (статического или нет мы не знаем), например,
$data = [
  "class"=>  "MyClass",
  "method"=> "methodA"
];

Нужно вызвать метод methodA не зная статический он или нет.
Можно ли определить каким методом является methodA? (либо существует другое решение данной задачи?)
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
rpsv
@rpsv
делай либо хорошо, либо никак
(new ReflectionMethod('MyClass', 'methodA'))->isStatic();

Ну а вообще зачем вам знать статический или нет метод? Статический вызывается без контекста, а НЕ статически с контекстом, т.е. по хорошему вызов должен быть:
call_user_func([$object, 'method']);
call_user_func(['ClassName', 'staticMethod']);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@oxidmod
Главный вопрос, кто формирует массив?
$data = [
  "class"=>  "MyClass",
  "method"=> "methodA"
];


Лучше всего, чтобы тот, кто формирует этот массив вместо него формировал другой, пригодный для call_user_func

Если это поменять нельзя, то тогда только через рефлексию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
27 сент. 2020, в 19:56
12000 руб./за проект
27 сент. 2020, в 19:45
1500 руб./за проект
21 сент. 2020, в 10:43
2000 руб./в час