Php 将抽象类的静态函数作为回调函数传递

Php 将抽象类的静态函数作为回调函数传递,php,Php,假设我们实现了一个包含一些工具的抽象类。例如,邮件功能: abstract class Tools { public static function sendMail () { // do some magic mail sending } } 现在我们有了一个index.php文件,它使用了frameworkflight(不在乎具体是哪个框架) 在这个index.php中,我们定义了一些路由,并分配了在请求某个路由时要调用的回调函数 Flight::route

假设我们实现了一个包含一些工具的抽象类。例如,邮件功能:

abstract class Tools {
    public static function sendMail () {
        // do some magic mail sending
    }
}
现在我们有了一个index.php文件,它使用了frameworkflight(不在乎具体是哪个框架)

在这个index.php中,我们定义了一些路由,并分配了在请求某个路由时要调用的回调函数

Flight::route('POST /mail', Tools::sendMail);
如果我尝试此代码,PHP将返回此异常:

致命错误:未定义的类常量“sendMail”

有没有一种方法可以在PHP中传递这样的函数?

使用:


为了引用静态类方法,需要传递两个信息:类的名称和要调用的静态函数的名称

//define the method
function callStaticClassMethod($className, $funcName) {
    $className::$funcName();
}

//call the method
callStaticClassMethod('Tools', 'sendMail');
我不知道有任何其他方法可以直接引用静态函数。

您可以使用以下方法:

[__CLASS__,'MethodName']
如果回调是在同一个类或

[Class::class,'MethodName']

如果不是。

重复,但我用完了标志,这肯定会起作用,但问题是这不是非常动态的-需要复制/粘贴此代码才能引用其他静态类函数。我使用了
Flight::route('POST/mail',function(){Tools::sendMail();})
[Class::class,'MethodName']