Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP三元运算符不';不解析类内属性?_Php - Fatal编程技术网

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';