PHP类中self和$this的区别
1.self代表类,$this代表对象
2.能用$this的地方一定使用self,能用self的地方不一定能用$this
静态的方法中不能使用$this,静态方法给类访问的。
今天在使用静态方法的时候,使用了$this去调用对象的属性,导致曝出错误信息,在网上查询了手册和百度,
发现大部分回答只是说明了在静态方法中不允许使用$this,只能使用self,较为靠谱的回答说明是$this是实例化对象的指针,self是对象的指针。
针对以上信息,综合自己的学习知识和网上搜索结果作下图:
其中,我们可以明显看到,self调用的类的指针,而非实例化后的对象指针,静态变量和静态方法始终属于类,而非属于实例化后的对象,因此在静态方法中无法使用$this,因为此时所处的位置是类所在的指针,只能使用self调用静态方法或者静态变量。
如果要在静态方法中,强制使用函数的其他方法,则只能先实例化一个新的对象,然后再使用该对象的方法。
综上所述,self调用的是类,而$this调用的则是实例化的对象。下面是代码。
<?php class demo { public $a; public $b; public static $c = 100; public function __construct($a) { $this->a = $a; $this->funct(); } public static function func() { $newObj = new self(20); $newObj->funct(); self::$c += 100; echo self::$c; } private function funct() { $this->b = $this->a * 200; } public function getC() { echo self::$c; } } $demo = new demo(3); $demo::func(); $demo::getC(); $demo2 = new demo(4); $demo2::func(); $demo::getC(); $demo2::getC(); $demo->getC();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决