这些陈述是否意味着同样的事情?
(empty($order)) ? $orderBy="ASC" && $order="down" : (($order=="up") ? $orderBy="ASC" && $order="down" : $orderBy="DESC" && $order="up");
if (empty($order)) {
$orderBy="ASC";
$order="down";
}
else {
if ($order=="up") {
$orderBy="ASC";
$order="down";
}
elseif ($order=="down") {
$orderBy="DESC";
$order="up";
}
}
或者我的语法不正确?
答案 0 :(得分:3)
您的语法不正确。三元运算符仅用于左侧的赋值,仅用于一个值。据我所知(并且很高兴被证明是错误的)你不能像你想要的那样用它来分配两个值。
// Assign $orderBy via nested ternary:
$orderBy = (empty($order)) ? "ASC" : (($order=="up") ? "ASC" : "DESC");
实际上,这可以更简洁,不需要嵌套:
// Assign $orderBy via nested ternary:
$orderBy = empty($order) || $order == "up" ? "ASC" : "DESC";
// Separately, assign $order
$order = empty($order) || $order == "up" ? "down" : "up";
答案 1 :(得分:2)
可能,但第二个版本很多更清晰。我不想像第一个那样维护代码,即使它确实有效。
答案 2 :(得分:2)
我认为这将有助于通过声明来解决这个问题。
//if empty($order)
(empty($order)) ?
// orderBy = ASC && order = down means if( ASC ) order = down
// since non-empty strings evaluate to true, then empty(order) => orderBy = ASC and order = down
$orderBy="ASC" && $order="down" :
// else (order is not empty) if order = up
(($order=="up") ?
// see above what logic is evaluated here.
$orderBy="ASC" && $order="down" :
// order is not empty and it is not = up
// orderBy = DESC & order = UP
$orderBy="DESC" && $order="up");
由于所有这些不同子句的性质,整个块将返回“TRUE”到空(order)前面的任何内容。
更清洁,更明显:
if( empty( $order ) || $order == 'up' )
{
$orderBy='ASC';
$order='down';
}
else
/* NOTE: No down referenced in original use 'elseif( $order == 'down' ) */
{
$orderBy='DESC';
$order='up';
}
至少,它会减少对其他人的打扰,老实说,这是一个非常好的政策。
哦,顺便说一下,这个:
if (empty($order)) {
$orderBy="ASC";
$order="down";
}
else {
if ($order=="up") {
$orderBy="ASC";
$order="down";
}
elseif ($order=="down") {
$orderBy="DESC";
$order="up";
}
}
变为:
(empty($order) || $order == 'up')?$oderBy='ASC' && $order = 'down':($order == 'down')?$orderBy = 'DESC' && $order = 'up': /* replace with your default */ FALSE;
但这会让人 ANGRY 。
答案 3 :(得分:1)
它被称为三元运算符,因为它需要三个操作数 - 一个条件,一个结果为true,一个结果为false。
如果这听起来像是对你的if声明,你就是对的钱 - 三元运算符是做if语句的简写(虽然很难阅读)。
最简单的例子:
// Using the ternary operator
<?php
$agestr = ($age < 16) ? 'child' : 'adult';
?>
// Using the if statement
<?php
if ($age < 16) {
$agestr = 'child';
} else {
$agestr = 'adult';
}
?>
答案 4 :(得分:0)
我认为判断这个的最好方法是让编译器决定。在C#中,这就是你得到的。编译时错误;不,你不能使用&amp;&amp;在三元运算符的true部分或false部分内的operator(或写多个语句)。