$ _data vs $ this-> _data - PHP

时间:2012-11-14 06:39:12

标签: php class this

我正试图找出$_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的吗?

3 个答案:

答案 0 :(得分:4)

PHP以及其他几种流行的编程语言(例如Java(重要的是要注意PHP的面向对象选择至少部分受到Java的启发)将上下文中的当前对象实例称为this。您可以将this,(或$this in PHP)视为“当前对象实例”。

在类方法中,$this引用当前对象实例。

使用上述内容的一个非常小的例子:

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

以上将输出somethingsome other thing。类成员与对象实例一起存储,但局部变量仅在当前范围内定义。

答案 1 :(得分: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
    }

}

答案 2 :(得分:1)

var $_data定义了一个类变量,$this->_data访问它。

如果您执行$this->$foo,则表示其他内容,就像$$foo一样:如果设置$foo = 'bar',则这两个表达式分别被评估为$this->bar和{{1} }