1

我试图找出两者之间的区别$_data vs $this->_data

class ProductModel
{

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

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

}

我知道在 PHPvar中用于定义类属性,但为什么要使用$this. 不应该是这样$this->$_data吗?这里使用的是什么 OOP 概念?它是特定于 PHP 的吗?

4

3 回答 3

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. 类成员与对象实例一起存储,但局部变量仅在当前范围内定义。

于 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访问它。

如果你这样做$this->$foo意味着别的东西,就像$$foo: 如果你设置$foo = 'bar',这两个表达式分别被评估为$this->bar$bar

于 2012-11-14T06:46:58.963 回答