Как кодировать/ссылаться на функции, вызываемые PHP, легко управлять для моей среды IDE
Когда мне нужно написать ссылку на вызываемую функцию, я использую стандартный синтаксис PHP определенный как:
Функция PHP передается по имени в виде строки. Любая встроенная или определяемая пользователем функция может использоваться [... опущена...].
Метод экземпляра объекта передается как массив, содержащий объект с индексом 0 и имя метода (aka string) при индексе 1.
Статические методы класса также могут быть переданы без экземпляра объекта этого класса, передав имя класса (еще строка) вместо объекта с индексом 0.
Как и в PHP 5.2.3, также можно передать (строку) 'ClassName:: methodName'.
Помимо общей пользовательской функции, анонимные функции также могут быть переданы параметру обратного вызова.
Все эти способы не являются "дружественными IDE" для таких операций, как рефакторинг имен функций или для поиска.
В моем ответе я предлагаю решение, но есть и другие подходы, которые могут быть применены, даже совершенно разные, что позволяет IDE "находить" вызов методов?
Ответы
Ответ 1
Вы уже находитесь рядом с самой короткой вещью, которую вы можете сделать
Вы можете полностью назвать свою анонимную функцию непосредственно в вызове функции без использования переменной
Например, вы можете заменить:
$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);
Ответ 2
Я стал решением, всегда основанным на анонимных функциях, которые решают проблему, но не оставляют меня неудовлетворенными:
Статический метод класса
$callable = function($param){
return \my\namespace\myClass::myMethod($param);
}
метод объекта
$callable = function($param) use ($object){
return $object->myMethod($param);
}
метод $this object
$callable = function($param){
return self::myMethod($param);
}
Альтернативы для самых старых версий php
Внутри всей классесы, которую вы вызовете (или в родителях), определите функцию classname() следующим образом:
public static function className()
{
return get_called_class();
}
или для очень старого PHP:
public static function className()
{
return "MyClass";
}
Тогда
call_user_func(array(MyClass::className(), 'myCallbackMethod'));