1

使用すると、コードでこのエラーが発生します$this->

致命的なエラー: 21 行目の /home/u506382626/public_html/s1/arrays.php の空のプロパティにアクセスできません

それが現在のオブジェクト変数にアクセスする方法だと思いますよね?

これは私のコードです。すべてのインデックスに対してより大きな値を持つ配列を作成しようとしていますが、インデックスの代わりに関数 at を使用しています。phpでoperator[]をオーバーロードすることは可能ですか?どのようにしますか?

誰かが何が問題なのか知っていることを願っています。

<?php

class zArray {
    public $change = 1.165;

    public $lenght;
    private $vars = array();
    public $name;
    public $percent = false;

    public function __construct($values) {
        for ($i=0; $i < 5; $i++) { 
            $vars[$i] = $values[$i];
        }
        $lenght = $values[5];
        $name = $values[6];
        $percent = $values[7];
    }

    public function at($i) {
        $newchange = $this->$change;
        for ( $i-- ; $i; $i-- )
            $newChange *= $this->$change;

        $newVars = $this->$vars;
        for ($i = 0; $i < 4; $i++) { 
            $newVars[$i] *= $newChange;
        }
        if ($percent) $newVars[4] /= $newChange;
        else $newVars[4] *= $newChange;

        return $newVars;
    }
};

$buildings = array(
    new zArray(85, 70, 65, 2, 100, 'Castle', true)
);

$try = $buildings[0]->at(3);



?>
4

2 に答える 2

7

このように変数にアクセスすることはできません

$this->$change; //wrong

これを試してみてください

$this->change;
于 2013-06-16T16:38:53.737 に答える
1

あなたの問題はこれです: $this->$change。2 番目の$記号 (つまり の記号$change) は間違っています。オブジェクト プロパティにアクセスするには、 を指定するだけ$this->changeです。

ただし、エラーメッセージがいかに混乱しているかがわかります。

表示される特定のエラー メッセージの理由は、$this->$change 有効な構文です。つまり、ローカル変数の値を取得し、$change名前がその値であるオブジェクトのプロパティを見つけます。

したがって、 があれば、それが機能し、プロパティの値が得られること$change = "name";がわかります。つまり、 と同等です。$this->$changename$this->name

$$これは、可変変数の構文を使用するのと似ています。

そして、エラー メッセージが何を伝えようとしているのかを説明します。実際にはローカル$change変数がないため、PHP はそれを空白と見なします。そのため$this->$change、その$change部分で空の文字列が返された場合、PHP は、空のプロパティにアクセスしようとしていると不平を言うのは当然のことです。

物事を説明するのに役立つことを願っています。エラー メッセージはわかりにくいかもしれませんが、何を伝えようとしているのかを理解することで、何が起こっているのかを簡単に見つけることができます。

于 2013-06-16T18:55:18.333 に答える