You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中static::调用非静态方法的解析与语法适用性问题

PHP中static::foo()调用的解析与语法疑问解答

一、代码里static::foo()的具体解析

这段代码运行后会输出两次Success!,其中static::foo()的执行逻辑如下:

  1. static::是PHP的后期静态绑定语法,在当前没有子类继承的场景下,static会直接解析为当前类A。
  2. 虽然foo是标记为private的非静态方法,但PHP允许使用::运算符调用非静态方法——不过这种调用方式会把方法当作静态方法执行,方法内部不能依赖$this(如果foo里用到$this会直接报错)。
  3. 因为foo是private方法,它的作用域仅限于类A内部,哪怕后续有子类继承A并尝试重写foo,static::foo()依然会调用类A的foo方法,不会被子类的实现覆盖。

二、::调用静态/非静态方法的语法说明

是的,PHP的作用域解析运算符::(Paamayim Nekudotayim)在语法上确实可以同时用于静态方法和非静态方法的调用,但两者有本质区别:

  • 调用静态方法:这是标准、推荐的用法,方法属于类级别,内部不能使用$this。
  • 调用非静态方法:这属于PHP的兼容语法,但不推荐使用——因为这种调用会脱离实例上下文,方法内如果存在$this会直接触发错误,同时也会让代码逻辑变得混淆,不符合面向对象的设计规范。

官方手册没有重点讲解这种用法,是因为它属于非标准场景,PHP官方更建议开发者用$this->调用非静态方法,用::调用静态方法,保证代码的可读性和规范性。

内容的提问来源于stack exchange,提问作者Denis Kulagin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:57:05