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

PHP 5.x中call_user_func()使用parent::/self::的警告及方法类型判断问题

关于PHP 5.x中parent::/self::调用非静态方法的警告问题

将参考PHP官方手册的“Changelog(更新日志)”部分说明:“parent和self等面向对象关键字的解析方式已变更。此前使用双冒号语法调用它们会触发E_STRICT警告,因为它们被解析为静态调用。” 请问在PHP 5.x中,此类调用是否属于静态调用非静态方法并触发警告?如果是,我们如何确定所调用的方法是非静态的?目前我们仅是假设如此,而方法仅有两种类型……

问题解答

在PHP 5.x版本中,答案是肯定的:用parent::或self::双冒号语法调用非静态方法时,确实会被解析为静态调用,并触发E_STRICT级别的警告。

至于如何判断所调用的方法是非静态的,有两个明确的依据:

  • 看方法的定义:如果方法声明时没有添加static关键字,那它就是非静态方法。在PHP 5的严格模式下,这类方法本应通过类的实例(比如$this->或者$obj->)来调用。
  • 看方法内部的实现:非静态方法允许使用$this关键字访问当前实例的属性和其他非静态方法,而静态方法中如果尝试使用$this会直接抛出错误,这也是区分两者的直观特征。

另外补充个小知识点:PHP 7及以后的版本调整了这部分的解析逻辑,用self::/parent::调用非静态方法不再触发E_STRICT警告,因为解析器已经能正确识别这种调用是针对当前类/父类方法的合法调用,而非严格意义上的静态调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:16:09