2010-05-13 53 views
2

数组值的方法我有这样调用与PHP

class someclass{ 
    public function somemethod(){} 
} 

类现在我有一个数组:

$somearray['someclass'] = new someclass(); 
$somearray['somemethod'] = 'somemethod'; 

我怎么能解雇他们,我试过如下:

$somearray['someclass']->$somearray['somemethod'](); 

usign这一点,我得到以下错误:

Fatal error: Method name must be a string in ......................

任何人都有一个想法如何做到这一点?

+1

你的语法是否正确和ER ror不应该被抛出。 – webbiedave 2010-05-13 19:53:32

+0

奇怪的是,我在这里简化了代码,所以也许我的错在别处。 – 2010-05-13 19:55:09

+0

当你运行你自己的简化代码时,你还会得到错误吗? – erisco 2010-05-13 20:01:40

回答

0

我无法重现与所提供的代码中的错误(如@webbiedave指出语法是正确的)。

但是,在使用它之前,您可以将方法名称转换为字符串,以确保方法名称是字符串。这将确保即使它是一个带有__toString()方法的用户定义对象,它也会被转换为其字符串表示形式。

$somearray['someclass']->{(string)$somearray['somemethod']}(); 
+0

我试过这个,并且我得到另一个错误:调用一个非对象 – 2010-05-13 19:55:39

+2

@Saif上的成员函数(),在代码的其他地方有问题。这表明'$ somearray ['someclass']'没有设置或为空。还有'$ somearray ['somemethod']'没有设置或为空。 – Yacoby 2010-05-13 19:58:56

+0

是的,错在别的地方。即使没有铸造,一切都很好。谢谢你的时间。 – 2010-05-13 20:07:38

0

尝试$somearray['someclass']->{$somearray['somemethod']}();

+0

当我这样做时,我得到:方法名称必须是字符串 – 2010-05-13 19:56:16

+0

您是否已验证'$ somearray ['somemethod']'实际上包含字符串? – thetaiko 2010-05-13 20:07:13

+0

我测试过这个工程。只要确保它是一个字符串。 – 2010-05-13 20:11:03

1

如果不希望工作方式(我同意它应该),你可以尝试:

call_user_func(array($somearray['someclass'], $somearray['somemethod'])); 
+0

+1不错的方法也适用。我使用的代码也起作用,我的代码中还有其他一些错误。但这绝对是一个不错的选择。 – 2010-05-13 20:10:19

0

下面的代码进行了测试,似乎是想你想:

<?php 


class someclass{ 
    public function somemethod(){ echo 'test'; } 
} 


$somearray['someclass'] = new someclass(); 
$somearray['somemethod'] = 'somemethod'; 

$somearray['someclass']->{$somearray['somemethod']}(); 

?> 
0

如何:

foreach (get_class_methods(get_class(new someclass()) as $method) { 
    $method();  
}