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