3

我想用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;
4

5 回答 5

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

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

for($i = 1; $i <= 4; $i++){
    $class->{'var' . $i}
}
于 2012-04-05T18:11:53.237 回答
2

代码没有按照你的想法做。$i由于您在 for 循环中,它只回显 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;
}
于 2012-04-05T18:18:00.380 回答
2

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

众多解决方案之一:

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

活的例子在这里

于 2012-04-05T18:18:08.997 回答
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}
}

首先计算其中的内容{},因此读取正确的属性。

于 2012-04-05T18:18:21.573 回答
0

这已经在最近的 PHP 版本上运行良好,但试试这个:

for($i = 1; $i <= 4; $i++){
    $v = 'var'.$i;
    echo $class->$v;
}
于 2012-04-05T18:13:11.930 回答