Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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_Class_Oop_Ternary Operator - Fatal编程技术网

Php 类中的三元运算符语法错误

Php 类中的三元运算符语法错误,php,class,oop,ternary-operator,Php,Class,Oop,Ternary Operator,我想使用三元运算符为类变量指定两个不同的值 我有下面的代码示例,其中我得到了致命错误 class test { public $data = (true) ? "working" : "not working"; //Parse error: syntax error, unexpected '(' in C:\xampp\htdocs\Faltu\test.php on line 15 function __construct() {

我想使用三元运算符为类变量指定两个不同的值

我有下面的代码示例,其中我得到了致命错误

    class test {
         public $data = (true) ? "working" : "not working"; //Parse error: syntax error, unexpected '(' in C:\xampp\htdocs\Faltu\test.php on line 15

         function __construct() {
            echo $this->data;
         }  
    }
    $test = new test(); 
我在没有上课的情况下试过,效果很好,但在课堂上我犯了错误

谁能指导我如何做到这一点


提前感谢

在声明属性时,您只能指定常量值,不能执行逻辑操作,如三元逻辑

您可以在
\u构造
函数中执行逻辑:

class test {
     public $data = NULL;

     function __construct() {
        $this -> data = true ? "working" : "not working";
        echo $this -> data; // working
     }  
}
$test = new test();
从:

该声明可能包含一个初始化,但该初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且必须不依赖于运行时信息才能进行计算

它很管用,看看吧

class test {
     public $data = NULL;

     function __construct() {
       echo  $this -> data = true ? "working" : "not working"; //working

     }  
}
$test = new test();

在属性的声明中,不能在构造函数内部执行该操作。必须声明属性,并且可以选择使用常量值(即编译时已知的值)初始化属性。在google上用10秒,或者确实是在查看以前关于类定义中的ternaries的问题时,应该告诉您,没有构造函数的情况下,有多大的可能复制是可能的吗?@Kalpit不,没有。逻辑发生在运行时(脚本运行时)。在编译时(当脚本被读取和解析时),您只能设置常量值(字符串、数字、数组等)。@Kalpit这是不可能的,只能在构造函数内部设置。这是最重要的事件之一limitations@Kalpit:在某种程度上:当您第一次使用属性时,您可以使用三元动态设置值,或者您可以创建一个getter方法来检查属性是否已设置,如果未设置,则可以指定一个默认值。但老实说,最好使用构造函数。这种限制的原因是纯粹的逻辑:类定义包含类的初始状态及其工作逻辑,但它不能依赖逻辑来确定如何定义类,因此
private static$foo=time()%2?“奇数':'偶数'
只是没有加起来:代码是在编译时处理的,而不是运行时,因此
time
函数还不必可用(我甚至认为我说得没错,@compile time)我认为重要的是要指出,这是有效的,因为您已经将三元运算符从成员变量定义中移到了构造函数中。解释原因,而不仅仅是如何解释,是非常有用的。。。