”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么PHP属性不能支持函数调用?

为什么PHP属性不能支持函数调用?

发布于2024-11-03
浏览:686

Why Can\'t PHP Attributes Support Function Invocation?

为什么 PHP 属性不能使用函数?

在 PHP 中,属性默认值不能包含函数调用,这一限制可能会引起疑问关于其实施。本文深入探讨了此设计选择的技术基础。

基本原理

编译器代码表明此限制是有意为之,但其原因尚未公开。检查编译过程可以提供一些见解。

编译过程

解析类变量声明时,编译器遵循特定的语法。赋值必须遵守静态标量定义。这些定义中的数组还必须包含静态标量。

如果语法允许非静态数组,则代码将通过语法检查。但是,这会在早期绑定阶段导致“无效绑定类型”编译错误,从而确保当前数组上的最后一个操作码与特定类型匹配。

有问题的操作码

分配非静态数组时,编译器会生成额外的操作码,例如 INIT_ARRAY 和 DO_FCALL。这些操作码会导致早期绑定期间不匹配,从而触发错误。

可能的解决方案和实施挑战

其他动态语言处理此类情况。 PHP 的潜在解决方案包括:

  • 创建作用域为类变量声明的新操作码数组。
  • 确定何时评估运行一次序列。

实现这些解决方案需要仔细考虑并对编译器进行重大更改。

结论

无法在 PHP 属性中使用函数源于编译过程。虽然这看起来像是一个限制,但它似乎是语言设计者有意识的选择。实施替代解决方案需要对编译过程进行重大重组,这可能不被视为优先事项。

版本声明 本文转载于:1729168036如有侵犯,请联系[email protected]删除
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3