为什么 PHP 属性不能使用函数?
在 PHP 中,属性默认值不能包含函数调用,这一限制可能会引发问题关于其实施。本文深入探讨了这种设计选择的技术基础。
基本原理
编译器代码表明此限制是有意为之,但其原因尚未公开。检查编译过程可以提供一些见解。
编译过程
解析类变量声明时,编译器遵循特定的语法。赋值必须遵守静态标量定义。这些定义中的数组还必须包含静态标量。
如果语法允许非静态数组,则代码将通过语法检查。但是,这会在早期绑定阶段导致“无效绑定类型”编译错误,从而确保当前数组上的最后一个操作码与特定类型匹配。
有问题的操作码
分配非静态数组时,编译器会生成额外的操作码,例如 INIT_ARRAY 和 DO_FCALL。这些操作码会导致早期绑定期间不匹配,从而触发错误。
可能的解决方案和实施挑战
其他动态语言可以处理此类情况。 PHP 的潜在解决方案包括:
实现这些解决方案需要仔细考虑并对编译器进行重大更改。
结论
无法在 PHP 属性中使用函数源于 PHP 属性中的设计决策编译过程。虽然这看起来像是一个限制,但它似乎是语言设计者有意识的选择。实施替代解决方案需要对编译过程进行重大重组,这可能不被视为优先事项。
以上是为什么PHP属性不能支持函数调用?的详细内容。更多信息请关注PHP中文网其他相关文章!