如何 code/reference 为我的 IDE 易于管理的 PHP 可调用函数

How to code/reference to a PHP callable functions easy to manage for my IDE

当我必须编写对可调用函数的引用时,我使用 PHP defined as:

的标准语法

A PHP function is passed by its name as a string. Any built-in or user-defined function can be used [... omitted...].

A method of an instantiated object is passed as an array containing an object at index 0 and the method name (aka string) at index 1.

Static class methods can also be passed without instantiating an object of that class by passing the class name (still a string) instead of an object at index 0.

As of PHP 5.2.3, it is also possible to pass (the string) 'ClassName::methodName'.

Apart from common user-defined function, anonymous functions can also be passed to a callback parameter.

所有这些方法都不是 "IDE friendly" 用于 函数名重构 查找 .[=15 的用法等操作=]

在我的回答中,我提出了一个解决方案,但还有其他方法可以应用,甚至完全不同,允许 IDE 到 "find" 方法的调用?

我找到了一个解决方案,总是基于 anonymous-functions 解决了问题但让我不完全满意:

class

的静态方法
$callable = function($param){ 
    return \my\namespace\myClass::myMethod($param); 
}

对象的方法

$callable = function($param) use ($object){ 
    return $object->myMethod($param); 
}

$this 对象的方法

$callable = function($param){ 
    return self::myMethod($param); 
}

最旧 php 版本的替代品

在你要调用的所有 classess 中(或在它们的父类中)定义函数 classname() 如下:

public static function className()
{
    return get_called_class();
}

非常 旧 PHP:

public static function className()
{
    return "MyClass";
}

然后

call_user_func(array(MyClass::className(), 'myCallbackMethod')); 

您已经接近可以做的最短的事情了

你可以完美地直接在你的函数调用中调用你的匿名函数,而无需使用变量

例如,您可以替换:

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

你将不得不等待 arrow functions 未来的 PHP 版本,你应该可以使用类似的东西:

call_user_func(fn($a) => $object->myMethod($a), $param);