Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用for循环访问类变量_Php_Oop - Fatal编程技术网

Php 使用for循环访问类变量

Php 使用for循环访问类变量,php,oop,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; } for($i=1;$i$var; }

我想使用
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;
}
for($i=1;$i$var;
}
或者,正如评论中提到的,这将在更新版本的PHP中工作

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

这在最新的PHP版本上已经可以很好地工作,但请尝试以下方法:

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

该代码没有按您的想法执行。它只回显1-4,因为for循环中的
$i
。如果要更改类中的变量,您的输出仍然是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;
}
点(.)运算符被echo使用,而不是成员调用$class

众多解决方案之一:

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

您实际上并没有得到回送的值,而是得到了回送的
$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}
}
for($i=1;$i{'var'.$i}
}

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

尝试更改类对象名称我认为
$class->{'var'.$i}
在以后的PHP版本中也可以使用。@Xeoncross yes,$class->{'var'.$i}至少在5.3之前可以使用。
$class->{'var'.$i}()
是一个不同的故事
for($i = 1; $i <= 4; $i++){
     echo $class->{'var'.$i};
}
for($i = 1; $i <= 4; $i++){
    $class->{'var'.$i}
}