此问题在此处已有答案:
How to use class methods as callbacks(5个答案)
去年关闭。
如何在PHP中动态调用类方法?类方法不是静态的。看来
call_user_func(...)
字符串
只适用于静态函数?
- 谢谢-谢谢
此问题在此处已有答案:
How to use class methods as callbacks(5个答案)
去年关闭。
如何在PHP中动态调用类方法?类方法不是静态的。看来
call_user_func(...)
字符串
只适用于静态函数?
7条答案
按热度按时间iovurdzv1#
它是双向的-您需要使用正确的语法
字符串
ztyzrc3y2#
备选方案1
字符串
备选方案2
型
选项1比选项2快,所以尽量使用它们,除非你不知道你要传递多少参数给方法。
编辑:以前的编辑器做了很大的工作,清理我的答案,但删除了提到的call_user_func_array,这是不同的,然后call_user_func。
PHP有
型
http://php.net/manual/en/function.call-user-func.php
和
型
http://php.net/manual/en/function.call-user-func-array.php的
使用call_user_func_array比使用上面列出的任何一个选项要慢几个数量级。
i5desfxk3#
你是说像这样吗
字符串
kgsdhlau4#
从PHP7开始,我们使用类似数组的方式:
字符串
只需将类名替换为
TestClass
,将方法名替换为$methodName
,将方法参数替换为...$args
。请注意,在后一种情况下,方法是静态的还是非静态的并不重要。一个优点是可以将数组作为可调用函数传递给函数。
更新:PHP 8.1
PHP 8.1中有一个新的一级可调用语法:
型
q43xntqr5#
字符串
有关更多详细信息,请参阅php回调文档。
aelbi1ox6#
编辑:我刚刚才明白你想问什么……好吧,不管怎样,我会留下我的评论。如果你喜欢的话,你可以用变量来代替类和方法的名字。。(但是你疯了)- nick
要从类中调用函数,您可以使用以下两种方法之一...
您可以创建类的示例,然后调用它。例如:
字符串
或者...你可以静态调用函数..即没有类的示例。例如:
型
当然,你需要声明你的函数是静态的:
型
如果一个类没有被定义为静态的,那么你必须创建一个对象的示例。(所以对象需要一个构造函数)例如:
型
需要记住的重要一点是,静态类函数不能使用
$this
,因为该类没有示例。(这也是他们走得快得多的原因之一。)yzckvree7#
这可能是有用的替代品
字符串