为什么 PHP 属性中不允许使用函数
当尝试在属性默认值中使用函数调用来初始化类属性时,PHP会引发语法错误。虽然这种行为可能看起来违反直觉,但它源于编译器中的特定设计考虑。
编译器工作流程
在表面之下,PHP 编译器通过生成指导口译员的行为。这些操作码是在解析输入代码时创建的。对于具有静态标量的类属性声明,编译器会生成一个值数组作为 ADD_STATIC_ARRAY_ELEMENT 操作码的一部分。但是,当在默认值中引入函数调用时,编译器会创建一个 INIT_ARRAY 操作码,这对于静态标量上下文无效。
执行环境
此外,在属性初始化期间评估函数调用的能力对运行时环境提出了挑战。类和函数定义的早期绑定是 PHP 编译过程的一个关键方面。尝试在属性初始化期间执行函数调用需要采用不同的方法来进行此绑定,从而引入复杂性和潜在的并发问题。
基本原理
禁止函数调用的决定属性默认值可能是基于这些实现挑战。虽然其他动态语言已经解决了这种情况,但需要对 PHP 的编译器和执行环境进行重大架构更改。
潜在的解决方案
虽然在属性默认值中实现函数调用可能会如果可行,就需要新的操作码和精心设计的执行策略。考虑到现有可行的替代方案,例如在构造函数中初始化属性,PHP 语言设计者可能并不认为此功能是高优先级功能。
以上是为什么 PHP 属性默认值中不允许使用函数?的详细内容。更多信息请关注PHP中文网其他相关文章!