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

コードはあなたが思っていることをしていません。$iforループにいるため、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

ドット(。)演算子は、$ classへのメンバー呼び出しではなく、エコーによって使用されています。

多くの解決策の1つ:

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。値が1の場合は、たまたま発生します(他の何かにvar1変更すると、私が何を意味するかがわかります)$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 に答える