我有一个这样的课程
class someclass{
public function somemethod(){}
}
现在我有一个数组:
$somearray['someclass'] = new someclass();
$somearray['somemethod'] = 'somemethod';
我如何解雇他们,我尝试了以下方法:
$somearray['someclass']->$somearray['somemethod']();
用这个我得到以下错误:
致命错误:方法名称必须是......................
中的字符串
任何人都知道如何做到这一点?
答案 0 :(得分:1)
如果它不想以这种方式工作(我同意它应该),你可以尝试:
call_user_func(array($somearray['someclass'], $somearray['somemethod']));
答案 1 :(得分:0)
尝试$somearray['someclass']->{$somearray['somemethod']}();
答案 2 :(得分:0)
我无法使用提供的代码重现错误(因为@webbiedave指出语法是正确的。)
但是,在使用它之前,您可以将方法名称转换为字符串,以确保方法名称是字符串。这将确保即使它是具有__toString()
方法的用户定义对象,它也将转换为其字符串表示形式。
$somearray['someclass']->{(string)$somearray['somemethod']}();
答案 3 :(得分:0)
以下代码经过测试,似乎是您想要的:
<?php
class someclass{
public function somemethod(){ echo 'test'; }
}
$somearray['someclass'] = new someclass();
$somearray['somemethod'] = 'somemethod';
$somearray['someclass']->{$somearray['somemethod']}();
?>
答案 4 :(得分:0)
这个怎么样:
foreach (get_class_methods(get_class(new someclass()) as $method) {
$method();
}