在PHP中,call_user_func(array(self, 'method_name'))
不起作用。 {1}}关键字无法在该上下文中使用。我需要实际包含类self
的名称。
但是,如果我不在静态函数中,call_user_func(array('class_name', 'method_name'))
变量在该上下文中起作用。为什么不同?
答案 0 :(得分:11)
如果需要当前类上下文的名称,请使用get_class()(不带任何参数)或__CLASS __。
你已经写好了; self是一个关键字,不能用作数组中的引用(在PHP中应该使用哪种类型?)。 get_class()返回一个字符串,而array() - callback支持使用字符串作为静态调用的第一个名称。
答案 1 :(得分:3)
您可以尝试使用__CLASS__
来获取班级名称。此外可以直接使用call_user_func('self::method_name')
,但我没有对其进行测试,而documentation about callbacks没有对此进行任何说明。
答案 2 :(得分:2)
self
只是一个未定义的常量,因此它表示'self'
。所以这两个是相同的:
array(self, 'method_name');
array('self', 'method_name');
根据您使用的PHP版本,这实际上有效,请参阅Demo。
如果它不适用于您的PHP版本,则可以使用以下选项:
call_user_func(array(__CLASS__, 'method_name'));
或
call_user_func(__CLASS__.'::method_name'));
或(如果您不需要call_user_func
):
self::method_name();
答案 3 :(得分:2)
在PHP 5.3中,您可以编写call_user_func('self::method')
或call_user_func(array('self', 'method'))
。我想后者也可以在旧版本中使用。
答案 4 :(得分:1)
从PHP 5.5开始,您可以进行[self::class, 'methodName']
。
::class
对于具有类名(可能是本地别名)并且需要将完整的类名生成为字符串的情况非常有用。