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}
}