千家信息网

PHP中$this,self,static有什么区别

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"PHP中$this,self,static有什么区别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PHP中$this,self,s
千家信息网最后更新 2026年11月02日PHP中$this,self,static有什么区别

这篇文章主要讲解了"PHP中$this,self,static有什么区别",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PHP中$this,self,static有什么区别"吧!

学习时间

简单地说,

$this 指向当前的对象实例,self 指向当前类。

换句话说:

$this->member 调用非静态属性/方法,self::number 调用静态属性/方法。

举个栗子,比较直观,说概念总是那么枯燥。

上面这个例子很明确地使用了静态属性,和动态属性,在构造函数内调用。实例化时执行。

如果反过来用就出错了,比如使用:

self::$non_static_member . ' ' . $this->static_member;

self 调用了非静态属性,而 $this 调用了静态属性,这是错误的用法。

下面使用含有 $this 对象属性/方法调用重载了的函数方法,演示类的多态性:

上述文件执行后,返回值 Y::foo()。$this 作为实例化的 Y 对象,直接访问了其动态方法 foo()。而继承的 X 类的 foo() 方法被重写,并不执行。

现在换一种写法。

这次类 X 的 bar 方法我们使用 self::foo() 调用。那么很显然,self 就是 class X 本身,那么调用的也自然是 X 的 foo 方法。上述程序输出 X::foo()。

引申:尽量别用 self::,要用 static::

self 简单好用,但是作用域叫人恼火。因为它的作用域是在定义时的,而不是执行时的。比如这么个例子:

如果调用 Person::status(),返回 'Person is alive'。现在新建类,并继承该类:

执行 Deceased::status(),你期望得到什么,肯定是 Decased 类的 getStatus() 返回的值对么?可是结果返回了 Person::status() 的值。这是因为 status 方法被调用时,使用了 self::getStatus(),访问的是 Person 类的 getStatus() 方法。这是由 self 作用域决定的。

怎么才能返回期望的值?使用 static 替换 self。

还是那个规则:$this 引用的是当前的类的实例,static 引用的是当前的类本身。

我们从优秀的代码中学习用法。下面是 Laravel ValidationData 类内的一个静态方法。

感谢各位的阅读,以上就是"PHP中$this,self,static有什么区别"的内容了,经过本文的学习后,相信大家对PHP中$this,self,static有什么区别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

方法 属性 静态 实例 学习 作用 对象 例子 内容 函数 动态 就是 指向 这是 期望 优秀 多态 恼火 枯燥 直观 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 互联网科技产业 国智互联网科技 科技金融是不是互联网金融 互联网科技会 互联网为科技 互联网最新的科技有限公司 亿账通互联网科技 互联网科技咨询 青海省互联网新科技 华中科技有哪些互联网大佬 深圳国际航运科技和互联网 广州慧亚互联网科技怎么样 欧洲十大科技互联网公司 互联网为啥属于高科技 互联网科技与大数据专业 洛阳昕诺飞互联网科技有限公司 允成互联网科技有限公司融资 互联网企业科技类企业如何做账 保山互联网科技靠谱吗 互联网科技社 四个字互联网科技公司取名 青岛中康互联网医疗科技有限公司 互联网科技与管理 互联网保险科技创业 佛山市翊博互联网络科技有限公司 洛阳共同富裕互联网科技有限公司 易租星互联网科技有限公司 科技互联网专业务虚会材料 银川新华互联网科技学校招聘
0