PHP中的$this解析

本文详细介绍了PHP中$this指针的概念及用法,通过具体示例解释了如何使用$this来访问类的成员变量和方法,并对比了与其他编程语言的区别。


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 只能在类内部使用。否则将出错。

有一点值得注意的是,在类内部调用变量时,有遇到过两种写法:$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则可以理解为以一个变量值为变量名的变量。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值