我试图弄清楚为什么类中的三元运算符不会解析。我认为一个例子是展示这一点的最明确的方式。
这很好用:
$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();
我收到以下消息:
PHP Parse error: syntax error, unexpected '?', expecting ')' in junk.php on line 6
对于记录,它在数组声明之外也不起作用:
private static $a = 1 ? 'true' : 'false';
给出了相同的错误消息。
为什么这不起作用?它只是解析引擎中的一些奇怪的错误吗?我完全不知所措。 manual on ternary operators表示运算符是一个表达式,它应始终在数组赋值的右侧。我在PHP 5.4.28上,如果这有任何区别。
答案 0 :(得分:3)
类属性必须是常量表达式。
这个声明可能包括初始化,但是这个 初始化必须是一个常量值 - 也就是说,它必须能够 在编译时进行评估,不得依赖于运行时 信息以便进行评估。