我可以在PHP中执行以下操作吗?
$lstrClassName = 'Class';
$lstrMethodName = 'function';
$laParameters = array('foo' => 1, 'bar' => 2);
$this->$lstrClassName->$lstrMethodName($laParameters);
我现在使用的解决方案是使用eval()调用函数,如下所示:
eval('$this->'.$lstrClassName.'->'.$lstrMethodName.'($laParameters);');
我很好奇是否有更好的方法来解决这个问题。
谢谢!
答案 0 :(得分:9)
您不需要eval来执行此操作......具体取决于您的版本
示例
class Test {
function hello() {
echo "Hello ";
}
function world() {
return new Foo ();
}
}
class Foo {
function world() {
echo " world" ;
return new Bar() ;
}
function baba() {
}
}
class Bar {
function world($name) {
echo $name;
}
}
$class = "Test";
$hello = "hello";
$world = "world";
$object = new $class ();
$object->$hello ();
$object->$world ()->$world ();
$object->$world ()->$world ()->$world(" baba ");
输出
Hello World baba
如果您使用的是PHP 5.4,您可以直接调用它而无需声明变量
您可能还想查看call_user_func
http://php.net/manual/en/function.call-user-func.php
答案 1 :(得分:4)
您是否尝试过代码?找出某些东西是否有效的最佳方法是尝试它。如果您尝试了它,您会发现是的,它确实有效(假设$this
有一个名为Class
的属性,它是定义名为function
的方法的对象的实例。
答案 2 :(得分:1)
我建议你call_user_func_array可以用于函数和数组而不是eval。 然而,语法与您的建议不同,并且我倾向于尽可能避免使用eval,您可以将其用于:
要使用对象调用它,只需执行以下操作:
$return=call_user_func_array(array($objInstance, "CLASSMETHOD"), $paramArray);
答案 3 :(得分:0)
未经测试但
this->$$lstrClassName->$$lstrMethodName($laParameters);