我在书类中有一个方法display()
。PHP oop如何调用动态函数名称
$name = 'display()';
$book = new Book('PHP Object-Oriented Solutions', 300);
$book->$name;
我如何可以调用使用$book->$name
我在书类中有一个方法display()
。PHP oop如何调用动态函数名称
$name = 'display()';
$book = new Book('PHP Object-Oriented Solutions', 300);
$book->$name;
我如何可以调用使用$book->$name
你需要告诉你要执行的方法,而不是变量本身PHP显示方法,但实际的代码中:
$name = 'display';
$book = new Book('PHP Object-Oriented Solutions', 300);
$book->$name();
正如你所看到的,它将把$name
作为一个属性名称,正确的如此...如果你有两个一个属性和一个名为'display'的方法,那么就没有办法disti两者之间使用你所尝试过的东西。
最干净的方式(IMO至少)是使用类似:
$name = 'display';
$book = new Book('PHP Object-Oriented Solutions', 300);
call_user_func([$book, $name]); // This looks cleaner and/or more obvious on first sight.
// call_user_func_array([$book, $name], $arrayOfArguments);
// And as @Narf suggested (and I agree cuz we move forward)
call_user_func([$book, $name], ... $arrayOfArguments);
是的,你可以传递参数给这个函数,将被传递给函数,但你必须后列出它们可调用数组。为了避免这样做(难以维护,而且并不总是你想要的),你可以使用call_user_func_array
,它接受一个参数数组作为传递给可调用对象的第二个参数。
你尝试'$书 - > $ name'?错误是什么? – Dragos
我投票结束这个问题,因为它是PHP手册的副本。 http://php.net/manual/en/functions.variable-functions.php –
当我使用$书 - > $名称它说:注意:未定义的属性:Book :: $ display() –