使用带有成员名称的字符串变量访问类的成员

时间:2015-04-13 06:54:34

标签: php oop

简短版本:为什么我们无法访问这样的函数:

$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

1 个答案:

答案 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!