PHP callback: Is there an equivalent for ::class for a method of a class?

ぃ、小莉子 提交于 2021-02-20 02:52:15

问题


In PHP it is possible to get a full class name via class name resolution like this:

Example:

namespace Name\Space;
class ClassName {}

echo ClassName::class;

Output: Name\Space\ClassName

This is better than using the string Name\Space\ClassName directly in the code because code introspection especially in IDEs can find an error directly.

I wonder if there is something similar for methods of a class - this would be specifically useful for callback functions.

This is how you can basically can pass a callback:

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

$a('getInfo',5);

Instead of passing a string here (which might change), I would prefer to do something like this:

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

With I "go to declaration" click in the IDE I could go directly to getInfo plus I see errors in case with method does not exist anymore. Is there a way to achieve what I want to do here?


回答1:


In fact, you work with callable type. And PHP allows setting method/function name only as a string. But if you use classes and objects you will have a different way to set callback. For example:

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


来源:https://stackoverflow.com/questions/66238766/php-callback-is-there-an-equivalent-for-class-for-a-method-of-a-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!