这就是我的意思:
$object = ($userpresent) ? include file; new firstclass : include different file; new otherclass;
我知道上面的内容不正确。但有没有办法用速记来做到这一点?
由于
答案 0 :(得分:2)
不,conditional operator ?:
仅允许expressions作为操作数,但不允许statements:
第三组是三元运算符:
?:
。它应该用于根据第三个表达式在两个表达式之间进行选择,而不是选择两个句子或执行路径。带圆括号的三元表达式是一个非常好的主意。
因此,您的代码将产生语法错误。
只需使用标准if
语句,即更具可读性:
if ($userpresent) {
include file;
$object = new firstclass;
} else {
include different file;
$object = new otherclass;
}
答案 1 :(得分:1)
没有。这是ternary operation,它将返回并赋值(在您的情况下返回$ object)。做其他事情是行不通的。
答案 2 :(得分:0)
我试图想象为什么你需要使用这种语法来做它,但假设你有理由,并且可以包含这两个文件,你应该能够做到这样的事情:
$object = ($first = include($file1) && $second = include($file2) && $userpresent) ? new firstclass : new otherclass;
答案 3 :(得分:0)
回答“否”的答案是错误的 - 它并不漂亮,你应该为此做好准备,但它完全有可能。
$object = ($userpresent) ? (include "file" ? new firstclass : 0) : (include "different file" ? new otherclass : 0);
这假设两个文件都没有在评估为false的文件级别执行自定义返回语句(它们几乎从不这样做) - 如果这样做,则用额外的new
替换0 ...