成长,总在点滴之间

PHP面向对象中$this的理解

在定义一个类时,因为没有对类实例化(对象),因而也无法得知对象的具体名称是什么。这时,如果想调用类中的成员方法或成员变量,就只能通过伪变量$this调用,$this顾名思义就是指类本身,需要注意的一点是$this 只能在类内部使用。否则将出错。
有一点值得注意的是,在类内部调用变量时,有遇到过两种写法:$this->name以及$this->$name;这两者有什么区别?
以下属个人理解,如有错误,请指教。
参考下面的例子:

<?php
class Test{
public $name = "abc";
public $abc = "test";
public function eTest(){
$name1 = "name";
echo $this->name.'<br>';   // 输出 abc
echo $this->$name1.'<br>';  // 输出 abc,因为 $name1 的值是name,相当与这里替换成 echo $this->name;
$name2 = $this->$name1;  // $name2 的值是 abc
echo $this->$name2.'<br>';  // 输出 test,同上,相当与是 echo $this->abc;
}
}
$a = new Test();
$a ->eTest();
?>

下面我们分步骤来理解:
1、可以先将$this->name和$this->$name看成"$this->变量名",变量名可以是name也可以是$name,这看起来有些冲突,我们将$name换个变量,如$test,即name和$test作为变量名。
2、理解一个变量中存在有两个因素,即变量名和变量值。这样就可以简单的理解上面的变量名了。name本身就是一个变量的变量名,$test则可以理解为以一个变量值为变量名的变量。