使用for循环访问类变量

时间:2012-04-05 18:10:09

标签: php oop

我想用for循环访问类变量,这是我的简单类

class test{
    public $var1 = 1;
    public $var2 = 2;
    public $var3 = 3;
    public $var4 = 4;
}


$class = new test();

这是我尝试使用循环

访问变量的方法
for($i = 1; $i <= 4; $i++){
    echo $class->var.$i;
}

我得到的错误说 Notice: Undefined property: test::$var in C:\xampp\htdocs\test\index.php on line 12

嗯,这不是一个很大的错误,我实际上得到的价值回应但我仍然不明白为什么我会得到这个错误?

如果我这样做,一切正常:

echo $class->var1;

5 个答案:

答案 0 :(得分:6)

for($i = 1; $i <= 4; $i++){
    $var = 'var' . $i;
    echo $class->$var;
}

或者,正如评论中所提到的,这将适用于较新版本的PHP

for($i = 1; $i <= 4; $i++){
    $class->{'var' . $i}
}

答案 1 :(得分:2)

代码没有按照你的想法行事。由于for循环中的$i,它只回显1-4。如果你要更改班级中的变量,你的输出仍然是1-4。

未定义的属性通知是线索:它正在尝试访问属性var

如果您想存储重复和/或关联的数据,特别是在您的示例中,它通常更适合作为数组存储:

class test{
    public $vars;

    public function __construct()
    {
        $this->vars = array(1, 2, 3, 4);
    }
}

$obj = new test();

foreach($obj->vars as $var)
{
    echo $var;
}

答案 2 :(得分:2)

点(。)运算符被echo使用,而不是成员调用$ class。

众多解决方案之一:

for($i = 1; $i <= 4; $i++){
     echo $class->{'var'.$i};
}

live example here

答案 3 :(得分:2)

你实际上没有得到回应的价值,你得到$i回应。

echo $class->var.$i;被解释为echo ($class->var).($i);。由于var不是变量(因此是错误),因此它变为echo ''.$i;,因此您获得$i的值。恰好var1的值为1.(将$var1更改为其他内容,您将看到我的意思)

要解决此问题,您可以执行以下操作:

for($i = 1; $i <= 4; $i++){
    $class->{'var'.$i}
}

首先计算{}内的内容,以便读取正确的属性。

答案 4 :(得分:0)

这在最新的PHP版本上已经可以正常工作了,但试试这个:

for($i = 1; $i <= 4; $i++){
    $v = 'var'.$i;
    echo $class->$v;
}