如何编码/引用易于管理的PHP可调用函数,以便于我的IDE管理

当我必须编写对可调用函数的引用时,我使用PHP的标准语法定义如下

PHP 函数通过其名称作为字符串传递。任何内置或用户定义的函数都可以使用[...省略...]

实例化对象的方法作为数组传递,该数组包含索引 0 处的对象和索引 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对象的方法

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

推荐