Property hooks do not call parent's magic `__get` and `__set` methods when referencing parent property
还没有人认领这个 Issue。
- 主要语言
- C
- 星标
- 40.4k
- 派生
- 8.2k
- 平均合并
- 2 天 13 小时
- 30 天内合并 PR
- 96
描述
Description
I was playing around with property hooks and noticed the following (in my opinion) inconsistency when combining property hooks with inheritance and __get and __set:
The following code (for __get, the same applies for __set in https://3v4l.org/Q2OAj):
<?php
class ParentClass {
public function __get(string $name) {
echo "__get($name) was called\n";
}
}
class ChildClass extends ParentClass {
public $foo {
get => parent::$foo::get();
}
}
(new ParentClass)->foo;
(new ChildClass)->foo;
Resulted in this output:
__get(foo) was called
Fatal error: Uncaught Error: Undefined property ParentClass::$foo in /in/Y27mB:13
But I expected this output instead:
__get(foo) was called
__get(foo) was called
I tried searching the RFC and existing PHP issues, but I haven't found this example - apologies if I missed it. Barring something saying that this shouldn't work, I would expect it to.
PHP Version
PHP 8.4.3
Operating System
No response
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从提供的 PHP 8.4.3 复现代码开始,将 parent::$foo::get 和 parent::$foo::set 的 property-hook 路径与直接的魔术访问进行比较。payload 没有指出任何 php-src 文件或测试,因此请跟踪相关的 property-hook 和继承处理,然后验证两个示例都会调用父类的魔术方法,且不会出现未定义属性错误。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- php
- 领域
- compilers
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 45/100