PHP中作用域操作符::必须用于静态上下文,访问静态成员、常量及父类/本类方法;而->仅用于实例上下文,混淆会导致报错。
PHP 中的作用域操作符(也叫范围解析符)是 ::,它用来访问类中的静态成员、常量,以及在子类中调用父类的静态或非静态方法/属性(需配合 parent:: 或 self::)。
:: 而不是 ->
:: 用于静态上下文,-> 用于实例上下文。混淆两者会直接报错。
ClassName::staticMethod() —— 不能写成 $obj->staticMethod()(除非启用了严格模式且方法被标记为 static,否则会触发 E_DEPRECATED)ClassName::CONST_NAME —— -> 完全不支持常量访问self::METHOD_NAME 或 static::METHOD_NAME(后者支持后期静态绑定)parent::methodName(),尤其在重写后仍需复
用父逻辑时self::、static:: 和 parent:: 的区别
三者都依赖 ::,但绑定时机和目标不同,选错会导致意料外的行为。
self:::编译时绑定,始终指向定义该代码的类(不会随继承改变)static:::运行时绑定(后期静态绑定),指向实际调用时的类(支持“静态方法重写”语义)parent:::只在有继承关系时可用,指向当前类的直接父类,常用于构造函数或重写方法中补全父逻辑class A {
public static function who() { echo __CLASS__; }
}
class B extends A {
public static function who() { echo __CLASS__; }
public static function testSelf() { self::who(); } // 输出 A
public static function testStatic() { static::who(); } // 输出 B
}
->
PHP 允许用 $obj->staticMethod() 调用静态方法(向后兼容),但这会触发 E_DEPRECATED(PHP 8.2+ 默认报错),且语义混乱。
$user->getCount()(而 getCount 是 static 方法)User::getCount() 或 static::getCount()(在类内部):: 的地方:实例属性和普通方法:: 不处理对象状态,所以不能用于访问未声明为 static 的属性或方法,否则报 Fatal error: Uncaught Error: Access to undeclared static property 或类似错误。
ClassName::$normalProp、ClassName::normalMethod()
public,只要没加 static 关键字,就不能通过 :: 访问(new $className)::staticMethod(),否则解析出错真正容易被忽略的是 self:: 和 static:: 在 trait 或 final 类里的行为差异,还有 parent:: 在多重继承模拟(比如用多个 trait)中并不生效——它只认真实的 class 层级继承链。
# php
# access
# 工具
# ai
# 区别
# 作用域
# red
# Static
# 常量
# 父类
# 子类
# 构造函数
# Error
# 继承
# class
# public
# 多重继承
# Property
# 对象
# 严格模式
# ide
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Windows如何拦截腾讯视频广告_Windows拦截腾讯视频广告方法【方法】
获取 PHP 文件最后修改时间的正确方法
Win11如何卸载OneDrive_Win11卸载OneDrive方法【教程】
如何在 Django 中安全修改用户密码而不使会话失效
C#怎么创建控制台应用 C# Console App项目创建方法
Win11如何设置系统语言_Win11系统语言切换教程【攻略】
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
php文件怎么变mp4保存_php输出视频流保存为mp4操作【操作】
Go 中实现 Python urllib.quote() 等效功能的正确方式
Win11怎么压缩文件 Win11自带压缩解压功能使用【教程】
Win10系统更新错误0x80240034怎么办 Win10更新错误解决法【方法】
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
Windows怎样关闭开始菜单推荐广告_Windows关闭开始菜单推荐设置【步骤】
如何在Golang中实现邮件发送功能_Golang SMTP发送与错误处理示例
Win11怎么关闭自动调节亮度_Windows11禁用内容自适应亮度
Win11任务栏怎么调到左边_Win11开始菜单居左设置教程【步骤】
Win10怎样安装Word样式库_Win10安装Word样式教程【步骤】
Win11怎么关闭内容自适应亮度_Windows11显示设置CABC关闭
Windows11如何设置专注助手_Windows11专注助手使用攻略【技巧】
如何减少Golang内存碎片化_Golang内存分配与回收优化方法
如何在 Go 中创建包含映射(map)的切片(slice)结构
Mac怎么给文件夹加密_Mac创建加密磁盘映像教程【安全】
Python解释执行模型_字节码流程说明【指导】
c++中如何求一个数的平方根_c++ sqrt函数与牛顿迭代法
Win11怎么更改盘符_Win11磁盘管理修改驱动器号【步骤】
如何用正则表达式精确匹配最多含一个换行符的起止片段
Win11怎么用设置清理回收站_Win11设置清理回收站技巧【步骤】
Win11怎样安装企业微信_Win11安装企业微信教程【步骤】
PHP主流架构怎么处理表单验证_规则与自定义【技巧】
为什么本地php环境运行php脚本卡顿_php执行效率优化方法与设置【说明】
如何使用Golang实现容器健康检查_监控和自动重启
Win10怎样安装Excel数据分析工具_Win10安装分析工具包步骤【教程】
Go语言中slice追加操作的底层共享机制详解
Win11怎么设置夜间模式_Windows11显示设置蓝光过滤强度
Win11怎么设置按流量计费_Win11限制后台流量消耗【网络】
MAC如何启用访达侧边栏显示_MAC Finder偏好设置与常用目录添加【教程】
C#如何使用Channel C#通道实现异步通信
c++中如何使用auto关键字_c++11类型推导用法说明
Win11怎么开启剪贴板历史记录_Windows11 Win+V键使用技巧
php中self::能调用子类重写的方法吗_静态绑定与重写关系【介绍】
php转exe用什么工具打包快_高效打包软件推荐【汇总】
Win11怎么设置任务栏透明_Windows11使用工具美化任务栏
Win11怎么设置右键刷新选项_Windows11显示更多选项技巧
如何在Golang中写入JSON文件_保存结构体数据到文件
Python爬虫项目实战教程_Scrapy抓取与存储数据实例
C++如何使用std::transform批量处理容器元素?(代码示例)
c++怎么使用std::tuple存储多元组数据_c++ 11获取元素与解包操作【技巧】
c++中如何计算坐标系中两点间距离_c++勾股定理求距离
新手学PHP架构总混淆概念咋办_重点梳理【教程】
2026-01-02
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。