2012-04-05 31 views
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

那么它不是一个真正的大错误,我actualy获得价值呼应,但直到不明白为什么我会得到这个错误?

另外,如果我做这一切的方式工作得很好:

echo $class->var1; 
+0

尝试更改类对象名称 – 2012-04-05 18:12:09

回答

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

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

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

或者,如在评论中提到的,这将在PHP

的较新版本的工作
for($i = 1; $i <= 4; $i++){ 
    $class->{'var' . $i} 
} 
+3

我认为'$ class - > {'var'。$ i}'也适用于以后的PHP版本。 – Xeoncross 2012-04-05 18:13:32

+0

@Xeoncross是的,$ class - > {'var'。$ i}至少回到5.3。 [codepad上的这段代码](http://codepad.viper-7.com/LVw7j0) – orourkek 2012-04-05 18:20:57

+0

@Xeoncross:它也适用于PHP 5.2 :-) http://codepad.org/iiMKVNCd – 2012-04-05 18:25:09

0

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

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

点运算符是获得由echo使用而不是$ class的成员调用。

之一,是许多的解决方案:

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

live example here