gpt4 book ai didi

php - 使用简单表达式初始化 PHP 类属性声明会产生语法错误

转载 作者:可可西里 更新时间:2023-11-01 13:05:06 27 4
gpt4 key购买 nike

根据 PHP 文档,可以在具有以下限制的类中初始化属性:

“这个声明可以包括一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。”

我正在尝试初始化一个数组,但遇到了一些问题。虽然这工作正常:

public $var = array(
1 => 4,
2 => 5,
);

这会造成语法错误:

public $var = array(
1 => 4,
2 => (4+1),
);

即使这样也不被接受:

public $var = 4+1;

这表明它不是 array() 语言结构的限制。

现在,我上次检查时,“4+1”等同于一个常数值,它不仅应该被接受,而且实际上应该被优化掉。无论如何,它肯定能够在编译时进行评估。

那么这里发生了什么?限制真的是“根本不能是任​​何计算表达式”,而不是任何“能够在编译时求值”的表达式吗?在文档的语言中使用“评估”表明允许进行简单的计算,但是......

如果这是 PHP 中的错误,有人有错误 ID 吗?我试图找到一个,但没有任何运气。

最佳答案

PHP 不会在编译时执行此类操作;您不能将计算值分配给常量,即使所有运算符本身都是常量。类成员的默认值以完全相同的方式处理。我在尝试将 2 的幂分配给常量时遇到了这种行为:

class User {
const IS_ADMIN = 1;
const IS_MODERATOR1 = 1 << 1; // Won't work
const IS_MODERATOR2 = 0x02; // works
}

关于php - 使用简单表达式初始化 PHP 类属性声明会产生语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2702863/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com