PHP中$this与::不可混用:$this仅用于实例上下文,::用于静态或父类成员访问;混用会触发Fatal error;self::静态绑定,static::后期静态绑定,$this->动态绑定。
$this 和 :: 不能混用,直接写会报错在 PHP 类中,$this 指向当前实例对象,只能用于非静态(instance)上下文;而 :: 是作用域解析操作符,用于访问类的静态成员(static 属性/方法)或父类成员。二者运行时所依赖的作用域完全不同——混用会导致 Fatal error: Using $this when not in object context 或 Cannot access static property ... via $this。
$this->method() 和 self::method() 的本质区别
关键不在语法像不像,而在调用时绑定的目标不同:
$this->foo():运行时动态绑定,走对象的虚函数表(支持重写、多态)self::foo():编译期静态绑定,固定指向定义该语句的类(不随继承链变化)static::foo():后期静态绑定(LSB),运行时绑定到“实际调用的类”,支持继承覆盖例如:
class A {
public function call() {
echo $this->who(); // 输出 "A"(若未重写)
echo self::who(); // 总是输出 "A"
echo static::who(); // 输出实际调用者类名(如 B::call() 则输出 "B")
}
public function who() { return 'A'; }
public static function who() { return 'A'; }
}
class B extends A {
public function who() { return 'B'; }
public static function who() { return 'B'; }
}
以下写法都会出问题:
static 方法里写 $this->xxx → 报 Fatal error;应改用 self:: / static:: 或传入实例参数s
elf:: 调用非静态方法 → 语法允许但逻辑危险(绕过 $this 绑定,可能丢失对象状态)$this::xxx 是“实例版 ::” → 实际上它等价于 static::xxx(PHP 5.3+),不是 $this->xxx
$this
static:: 而不是 self::
当类被继承,且子类重写了静态方法或常量,又希望在父类中调用“子类版本”时:
self:::永远调用父类定义的静态成员static:::调用实际运行时的类(即 late static binding)典型例子是工厂模式或单例基类:
class Base {
protected static $instance = null;
public static function getInstance() {
if (static::$instance === null) { // ← 这里必须用 static::
static::$instance = new static(); // ← 否则 new self() 永远创建 Base 实例
}
return static::$instance;
}
}
class Child extends Base {}
$child = Child::getInstance(); // 得到 Child 实例,而非 Base
真正容易被忽略的是:即使你没写 static 关键字,只要用了 ::,就要立刻判断当前上下文是否允许——静态方法里没有 $this,这是硬约束,不是风格问题。
# php
# access
# 区别
# 作用域
# Static
# Object
# 常量
# 多态
# 父类
# 子类
# Error
# 继承
# 虚函数
# using
# Property
# 对象
# this
相关文章:
定制建站是什么?如何实现个性化需求?
网站微信制作软件,如何制作微信链接?
建站之星如何快速解决建站难题?
郑州企业网站制作公司,郑州招聘网站有哪些?
建站之星客服服务时间及联系方式如何?
建站之星如何助力企业快速打造五合一网站?
如何选择适配移动端的WAP自助建站平台?
如何在局域网内绑定自建网站域名?
c# 在ASP.NET Core中管理和取消后台任务
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
如何制作一个表白网站视频,关于勇敢表白的小标题?
建站之星后台密码如何安全设置与找回?
安云自助建站系统如何快速提升SEO排名?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
怀化网站制作公司,怀化新生儿上户网上办理流程?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
制作旅游网站html,怎样注册旅游网站?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
大连网站制作公司哪家好一点,大连买房网站哪个好?
制作网站的软件免费下载,免费制作app哪个平台好?
简单实现Android文件上传
淘宝制作网站有哪些,淘宝网官网主页?
如何有效防御Web建站篡改攻击?
购物网站制作公司有哪些,哪个购物网站比较好?
安徽网站建设与外贸建站服务专业定制方案
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
建站之星后台密码遗忘或太弱?如何重置与强化?
,石家庄四十八中学官网?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
建站主机选购指南:核心配置优化与品牌推荐方案
济南网站建设制作公司,室内设计网站一般都有哪些功能?
TestNG的testng.xml配置文件怎么写
如何选择适合PHP云建站的开源框架?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
济南专业网站制作公司,济南信息工程学校怎么样?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何在阿里云高效完成企业建站全流程?
如何通过西部建站助手安装IIS服务器?
XML的“混合内容”是什么 怎么用DTD或XSD定义
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
山东网站制作公司有哪些,山东大源集团官网?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
Thinkphp 中 distinct 的用法解析
如何快速启动建站代理加盟业务?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
浅析上传头像示例及其注意事项
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。