我想用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;
答案 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};
}
答案 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;
}