简短版本:为什么我们无法访问这样的函数:
$b = "simple_print()";
$obj->$b;
完整版本:
假设我们有一个像这样定义的用户类:
class User {
public $name;
function simple_print() {
echo "Just Printing" . "<br>";
}
}
现在,如果创建一个User对象并设置其名称,我们可以使用
打印其名称$obj = new User;
$obj->name = "John";
echo $obj->name;
虽然很奇怪我们也可以做这样的事情来打印&#34; John&#34;:
$a = "name";
echo $obj->$a;
但我们无法使用相同的想法访问某个功能:
$b = "simple_print()";
$obj->$b;
为什么呢? 不应该以同样的方式工作吗?
此外,是否有人知道它叫什么?我试图寻找&#34;通过变量访问成员&#34;和#34;使用一个方法通过一个名为它的变量&#34;但是我找不到与此相关的任何内容。
额外信息:我使用的PHP版本是:PHP版本:5.5.9-1ubuntu4.7
答案 0 :(得分:2)
你非常亲密,但犯了一个小小的逻辑错误。试试这个:
$b = 'simple_print';
$obj->$b();
这是因为该方法的名称是simple_print
,而不是simple_print()
。执行由括号触发,但不是名称的一部分,因此您访问方法的方式也是如此。
这是一个简短的例子:
<?php
class Test
{
public function simple_print() {
echo "Hello world!\n";
}
}
$object = new Test;
$method = 'simple_print';
$object->$method();
正如预期的那样,如果在CLI上执行,它会创建输出Hello world!
。