PHP 回调:类的方法是否有 ::class 的等效项?

2024-02-08

在 PHP 中,可以通过类名解析获取完整的类名,如下所示:

Example:

namespace Name\Space;
class ClassName {}

echo ClassName::class;

Output: Name\Space\ClassName

这比使用字符串更好Name\Space\ClassName直接在代码中进行,因为代码自省(尤其是在 IDE 中)可以直接发现错误。

我想知道类的方法是否有类似的东西 - 这对于回调函数特别有用。

这基本上就是传递回调的方法:

$a = function($callback,$arg) { return $callback($arg); }

$a('getInfo',5);

我不想在这里传递一个字符串(可能会改变),我更愿意这样做:

$a(MyClass::class::getInfo,5);

通过在 IDE 中单击“转到声明”,我可以直接转到getInfo另外,如果方法不再存在,我会看到错误。有没有办法实现我在这里想做的事情?


事实上,您使用的是可调用类型。 PHP 只允许将方法/函数名称设置为字符串。但如果您使用类和对象,您将有不同的方式来设置回调。例如:

$a = function($callback, $arg) { 
   return call_user_func($callback, $arg)); 
}

// call a static method of the class with 
// using fullname space and method name as a string
$a('Name\Space\MyClass::getInfo',5); 

// call a static method of the class 
// with using ::class 
$a([MyClass::class, 'getInfo'], 5);

// call a method of an object 
$myObject = new MyClass();
$a([$myOject, 'getInfo'], 5);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 回调:类的方法是否有 ::class 的等效项? 的相关文章

随机推荐