PHP三元运算符不';不解析类内属性?
我试图弄明白为什么类中的三元运算符不能解析。我认为用一个例子来说明这一点是最清楚的 这很好:PHP三元运算符不';不解析类内属性?,php,Php,我试图弄明白为什么类中的三元运算符不能解析。我认为用一个例子来说明这一点是最清楚的 这很好: $a = array( 'a' => 'foo', 'b' => 1 ? 'true' : 'false', 'c' => 'baz', ); print_r($a); /* Array ( [a] => foo [b] => true [c] => baz ) */ 但这甚至不能解
$a = array(
'a' => 'foo',
'b' => 1 ? 'true' : 'false',
'c' => 'baz',
);
print_r($a);
/* Array
(
[a] => foo
[b] => true
[c] => baz
)
*/
但这甚至不能解析:
<?php
class Junk {
private static $a = array(
'a' => 'foo',
'b' => 1 ? 'true' : 'false',
'c' => 'baz',
);
public static function printA() {
print_r(self::$a);
}
}
Junk::printA();
对于记录,它在数组声明之外也不起作用:
private static $a = 1 ? 'true' : 'false';
给出相同的错误消息
为什么这样不行?这只是解析引擎中的一些奇怪的错误吗?我完全困惑不解。表示运算符是一个表达式,应始终在数组赋值的右侧工作。如果有什么不同的话,我使用的是PHP5.4.28。类属性必须是常量表达式 此声明可能包括初始化,但 初始化必须是一个常量值——也就是说,它必须能够 在编译时进行计算,并且不能依赖于运行时 信息,以便进行评估
足够公平;这只是一条毫无帮助的错误信息。是否有任何地方精确定义了什么是常量值?我知道它“不能依赖于运行时信息”,但它的定义是什么<代码>静态$a=1代码>可以工作,但是
静态$a=(1)
不能。类似地,我的原始代码的计算结果总是“true”(其他语言的编译器可以理解这一点,但我想PHP不能)。
private static $a = 1 ? 'true' : 'false';