PHP中的$this解析

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



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则可以理解为以一个变量值为变量名的变量。


### 关于 `$this` 变量的使用说明 在 PHP 中,`$this` 是一个特殊的伪变量,用于指向当前对象实例。它通常在类的方法内部使用,以便访问该对象的属性和方法[^3]。 #### 基本概念 - 当在一个类的方法中使用 `$this->property` 或 `$this->method()` 时,表示正在访问当前对象的属性或方法。 - `$this` 的作用域仅限于类的内部,在静态上下文中无法使用 `$this`,因为静态方法不属于任何特定的对象实例[^4]。 #### 示例代码解析 以下是 `$this` 在实际中的应用: ```php <?php class MyClass { private $name; public function __construct($name) { $this->name = $name; // 使用$this设置私有属性$name } public function getName() { return $this->name; // 使用$this获取私有属性$name } public function printName() { echo $this->getName(); // 调用当前对象的getName方法并输出结果 } } $myClass = new MyClass("I Like PHP"); $myClass->printName(); ?> ``` 运行上述代码的结果为 `I Like PHP`[^2]。 #### 特殊情况下的 `$this` - **动态绑定**:如果通过闭包或其他方式传递了一个对象,则可以通过 `$this` 访问原始对象的内容[^1]。 ```php <?php class Example { public $value = 'Original'; public function getValue() { return $this->value; } } $obj = new Example(); // 动态绑定示例 $closure = function () { return $this->getValue(); // 此处$this仍然指向Example类的实例 }; echo $closure->bindTo($obj, Example)->(); // 输出 Original ?> ``` #### 错误案例分析 尝试直接赋值给 `$this` 将引发错误,例如以下代码会抛出致命错误: ```php $this = 'text'; // Error: Cannot re-assign $this ``` 然而,可以利用可变变量实现类似效果: ```php $name = 'this'; $$name = 'text'; // 设置$this为'text' echo $$name; // 输出 text ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值