根据PHP文档,可以在具有以下限制的类中初始化属性:
“此声明可以包括一个初始化,但是此初始化必须是一个常量值,也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。”
我正在尝试初始化数组并遇到一些问题。虽然这很好用:
public $var = array( 1 => 4, 2 => 5, );
这会产生语法错误:
public $var = array( 1 => 4, 2 => (4+1), );
甚至不被接受:
public $var = 4+1;
这表明它不是array()语言构造的限制。
现在,我最后一次检查时,“ 4 + 1”等于一个常数值,不仅应该接受它,而且实际上应该对其进行优化。无论如何,它肯定可以在编译时进行评估。
那么这是怎么回事?相对于“可以在编译时求值”的任何表达式而言,限制是否真的遵循“根本不能有任何计算出的表达式”的思路?在文档语言中使用“求值”表示允许进行简单的计算,但是a。
如果这是PHP中的错误,是否有人有错误ID?我试图找到一个,但是没有任何运气。
PHP在编译时不执行此类操作;即使所有运算符本身都是常量,也不能将计算值分配给常量。类成员的默认值的处理方式完全相同。我在尝试将2的幂分配给常量时遇到了这种现象:
class User { const IS_ADMIN = 1; const IS_MODERATOR1 = 1 << 1; // Won't work const IS_MODERATOR2 = 0x02; // works }