在 PHP 中将静态方法作为参数传递

2022-08-30 12:41:47

在PHP中,可以做这样的事情:

myFunction( MyClass::staticMethod );

因此,“myFunction”将具有对静态方法的引用并能够调用它。当我尝试它时,我得到一个“未定义的类常量”(PHP 5.3)的错误,所以我想这不是直接可能的,但是有没有办法做类似的事情?到目前为止,我管理的最接近的是将“函数”作为字符串传递并使用call_user_func()。


答案 1

要做到这一点,“php方法”是使用与is_callablecall_user_func完全相同的语法。

这意味着你的方法对存在是“中立的”

  • 标准函数名称
  • 静态类方法
  • 实例方法
  • 一个开合

对于静态方法,这意味着您应该将其传递为:

myFunction( [ 'MyClass', 'staticMethod'] );

或者,如果您尚未运行 PHP 5.4:

myFunction( array( 'MyClass', 'staticMethod') );

答案 2

由于您已经提到已经使用过,并且您对具有该解决方案或将静态函数作为字符串传递的解决方案不感兴趣,因此这里有一种替代方法:使用匿名函数作为静态函数的包装器。call_user_func()

function myFunction( $method ) {
    $method();
}

myFunction( function() { return MyClass::staticMethod(); } );

我不建议这样做,因为我认为这种方法更简洁。call_user_func()


推荐