Как кодировать / ссылаться на вызываемые в PHP функции, которыми легко управлять для моей IDE

Когда мне нужно написать ссылку на вызываемую функцию, я использую стандартный синтаксис PHP определяется как:

PHP-функция передается своим именем в виде строки. Можно использовать любую встроенную или пользовательскую функцию [… опущено …].

Метод экземпляра объекта передается как массив, содержащий объект с индексом 0 и название метода (иначе строка)
по индексу 1.

Методы статического класса также могут быть переданы без создания экземпляра объекта этого класса путем передачи имя класса (все еще строка)
вместо объекта с индексом 0.

Начиная с PHP 5.2.3, также возможно пройти (строка) «ИмяКласса :: имяМетода».

Помимо обычной пользовательской функции анонимные функции также могут быть переданы в параметр обратного вызова.

Все эти способы не являются «дружественными к IDE» для таких операций, как рефакторинг имени функции или же найти использование.

В своем ответе я предлагаю решение, но существуют ли другие подходы, которые могут быть применены, даже совершенно разные, которые позволяют IDE «найти» вызов методов?

16

Решение

Вы уже рядом с самой короткой вещью, которую вы можете сделать

Вы можете безошибочно вызывать анонимную функцию непосредственно в вызове функции.

Например, вы можете заменить:

$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);
10

Другие решения

Я стал к решению, всегда основанному на анонимная-функция что решить проблему, но оставить меня не полностью доволен

Статический метод класса

$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'));
2