8.3 - cannot set finality and visibility for method from trait at the same time
未关闭
还没有人认领这个 Issue。
Bug
Status: Needs Triage
- 主要语言
- C
- 星标
- 40.4k
- 派生
- 8.1k
- 平均合并
- 2 天 13 小时
- 30 天内合并 PR
- 96
描述
Description
The following code:
<?php
trait SimpleTrait
{
private function foo() {}
}
class TraitFixtureWithFinalAndProtected
{
use SimpleTrait {
foo as final protected;
}
}
$rm = new ReflectionMethod(TraitFixtureWithFinalAndProtected::class, 'foo');
var_dump($rm->isFinal());
var_dump($rm->isPrivate());
var_dump($rm->isProtected());
var_dump($rm->isPublic());
Resulted in this output:
bool(false)
bool(true)
bool(false)
bool(false)
But I expected this output instead:
bool(true)
bool(false)
bool(true)
bool(false)
Looks like as final protected is completely ignored, does not change the method but does not throw an error either.
Related to: https://github.com/php/php-src/issues/12854
PHP Version
PHP 8.3
Operating System
No response
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先运行提供的 PHP 8.3 复现程序,并将 ReflectionMethod 标志与预期输出进行比较。跟踪负责 as final protected 的 trait 方法别名处理路径,然后添加一个回归测试,展示两个修饰符都已应用,并确认反射得到的可见性和 final 状态。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- php
- 领域
- compilers
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 54/100