PHP oop如何调用动态函数名称

时间:2016-12-06 10:28:09

标签: php

我在书类中有一个方法display()

$name = 'display()';
$book = new Book('PHP Object-Oriented Solutions', 300);

$book->$name;

如何使用$book->$name

调用显示方法

2 个答案:

答案 0 :(得分:3)

你需要告诉PHP你正在尝试执行一个方法,而不是在变量本身,而是在实际的代码中:

$name = 'display';
$book = new Book('PHP Object-Oriented Solutions', 300);

$book->$name();

否则,正如您所见,它会将$name视为属性名称,这是正确的......如果您有两个属性和名为'display'的方法,没有办法用你尝试过的方法来区分两者。

答案 1 :(得分:0)

最干净的方式(至少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接受一个参数数组作为传递给callable的第二个参数。

call_user_func Documentation

call_user_func_array Documentation