1

私は間の違いを理解しようとしています$_data vs $this->_data

class ProductModel
{

    var $_data = null; <--- defined here

    function test() 
    {
       $this->_data = <--- but it's accessed using $this
    }

}

PHPでクラスのプロパティを定義するために使用されていることは知ってvarいますが、なぜそれを使用してアクセスするのですか$this。のようにすべきではありません$this->$_dataか?ここで使用されているOOPの概念は何ですか?PHP固有ですか?

4

3 に答える 3

4

PHP は、Java などの他のいくつかの人気のあるプログラミング言語 (PHP のオブジェクト指向の選択は、少なくとも部分的に Java に触発されたことに注意することが重要です) と一緒に、コンテキスト内の現在のオブジェクト インスタンスを として参照しますthisthis, (または$this in PHP) を「現在のオブジェクト インスタンス」と考えることができます。

クラス メソッド内で$this、現在のオブジェクト インスタンスを参照します。

上記のものを使用した非常に小さな例:

$_data = 'some other thing';
public function test() {
   $_data = 'something';
   echo $_data;
   echo $this->_data;
}

上記は出力されますsomethingsome other thing。クラス メンバーはオブジェクト インスタンスと共に格納されますが、ローカル変数は現在のスコープ内でのみ定義されます。

于 2012-11-14T06:44:01.117 に答える
1

いいえ、そうすべきではありません。PHP はメンバー名を動的に評価できるため、この行は

$this->$_data

$dataは、ローカル変数で指定された名前のクラス メンバーを参照します。このことを考慮:

class ProductModel
{

    var $_data = null; <--- defined here

    function test() 
    {
       $member = '_data';
       $this->$member = <--- here you access $this->_data, not $this->member
    }

}
于 2012-11-14T06:44:14.893 に答える
1

var $_dataクラス変数を定義し、$this->_dataそれにアクセスします。

を設定すると、これらの 2 つの式はそれぞれ と として評価されます$this->$foo$$foo$foo = 'bar'$this->bar$bar

于 2012-11-14T06:46:58.963 に答える