Когда мне нужно написать ссылку на вызываемую функцию, я использую стандартный синтаксис PHP определяется как:
PHP-функция передается своим именем в виде строки. Можно использовать любую встроенную или пользовательскую функцию [… опущено …].
Метод экземпляра объекта передается как массив, содержащий объект с индексом 0 и название метода (иначе строка)
по индексу 1.Методы статического класса также могут быть переданы без создания экземпляра объекта этого класса путем передачи имя класса (все еще строка)
вместо объекта с индексом 0.Начиная с PHP 5.2.3, также возможно пройти (строка) «ИмяКласса :: имяМетода».
Помимо обычной пользовательской функции анонимные функции также могут быть переданы в параметр обратного вызова.
Все эти способы не являются «дружественными к IDE» для таких операций, как рефакторинг имени функции или же найти использование.
В своем ответе я предлагаю решение, но существуют ли другие подходы, которые могут быть применены, даже совершенно разные, которые позволяют IDE «найти» вызов методов?
Вы уже рядом с самой короткой вещью, которую вы можете сделать
Вы можете безошибочно вызывать анонимную функцию непосредственно в вызове функции.
Например, вы можете заменить:
$callable=function($param) use ($object){
return $object->myMethod($param);
}
call_user_func($callable, $param);
от:
call_user_func(function($param) use ($object){
return $object->myMethod($param);
}, $param);
Вам придется ждать функции стрелок в будущих версиях PHP, и вы сможете использовать что-то вроде:
call_user_func(fn($a) => $object->myMethod($a), $param);
Я стал к решению, всегда основанному на анонимная-функция что решить проблему, но оставить меня не полностью доволен
Статический метод класса
$callable = function($param){
return \my\namespace\myClass::myMethod($param);
}
метод объекта
$callable = function($param) use ($object){
return $object->myMethod($param);
}
метод $ этого объекта
$callable = function($param){
return self::myMethod($param);
}
Альтернативы для старых версий PHP
Внутри всех классов, которые вы собираетесь назвать (или у их родителей), определите функцию имя_класса () следующим образом:
public static function className()
{
return get_called_class();
}
или для очень старый PHP:
public static function className()
{
return "MyClass";
}
затем
call_user_func(array(MyClass::className(), 'myCallbackMethod'));