Как кодировать/ссылаться на функции, вызываемые 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'));