this是指向当前对象的指针[php] view plaincopyprint?
<?php
class human{
public $name="李四";
public function eat(){
echo $this->name,'在吃饭';
}
public function test(){
echo $name,'在吃饭';
}
}
$li=new human();
echo $li->name;//李四
$li->eat();//李四在吃饭。
/*
和java,c++相比
方法体内想访问调用者的属性,必须用$this
如果不加,则理解为方法内部的一个局部变量.
*/
$li->test();//Notice: Undefined variable: name in C:\wamp\www\php\this.php on line 14
/******
从生活中的角度来理解$this
女娲造人时, 造了一个"悔恨"的方法
{
抓[自己]头发
抽 [自己] 脸
}
世界上的人那么多,
悔恨时,抓谁的头发?
抽谁的脸?
张三,李四? 王五? 都不能说明合理的情况
只能理解为"自己"
******/
?>
<?php
class human{
public $name="李四";
public function eat(){
echo $this->name,'在吃饭';
}
public function test(){
echo $name,'在吃饭';
}
}
$li=new human();
echo $li->name;//李四
$li->eat();//李四在吃饭。
/*
和java,c++相比
方法体内想访问调用者的属性,必须用$this
如果不加,则理解为方法内部的一个局部变量.
*/
$li->test();//Notice: Undefined variable: name in C:\wamp\www\php\this.php on line 14
/******
从生活中的角度来理解$this
女娲造人时, 造了一个"悔恨"的方法
{
抓[自己]头发
抽 [自己] 脸
}
世界上的人那么多,
悔恨时,抓谁的头发?
抽谁的脸?
张三,李四? 王五? 都不能说明合理的情况
只能理解为"自己"
******/
?>
在定义一个类时,因为没有对类实例化(对象),因而也无法得知对象的具体名称是什么。这时,如果想调用类中的成员方法或成员变量,就只能通过伪变量$this调用,$this顾名思义就是指类本身,需要注意的一点是$this
有一点值得注意的是,在类内部调用变量时,有遇到过两种写法:$this->name以及$this->$name;这两者有什么区别?
参考下面的例子:
<?php
class
public
public
public
$name1
echo
echo
$name2
echo
}
}
$a
$a
?>
下面我们分步骤来理解:
1、可以先将$this->name和$this->$name看成"$this->变量名",变量名可以是name也可以是$name,这看起来有些冲突,我们将$name换个变量,如$test,即name和$test作为变量名。
2、理解一个变量中存在有两个因素,即变量名和变量值。这样就可以简单的理解上面的变量名了。name本身就是一个变量的变量名,$test则可以理解为以一个变量值为变量名的变量。