以下代码的三元组

时间:2017-05-25 16:00:01

标签: php

我得到了以下代码,是否可以将else条件作为三元组来执行:

if (condition) {
   //do something
} else {
    if (isset($_POST['A'])) {
        header("Location: /LocationA");
        exit;
    }
    if (isset($_POST['B'])) {
        header("Location: /LocationB");
        exit;
    }
}

我尝试过以下操作,但我不确定我是否正确:

 isset($_POST['A']) ? header("Location: /LocationA")
        : header("Location: /LocationB}");
 exit;

我只需要在声明中更改ELSE。所以它会像:

if (condition) {
 //do something
} else {
 //ternary
}

2 个答案:

答案 0 :(得分:5)

  

但我不确定我是否正确

你不对。

ternary operator?:)是一名运营商。正如the documentation所说:

  

运算符是一个接受一个或多个值(或编程术语中的表达式)并产生另一个值(以便构造本身成为表达式)的东西。

请注意单词"值"和"表达"在上面的句子中。

PHP函数header()没有返回任何内容。调用header(...)没有值,只有副作用(它会修改程序的状态)。

您正尝试将if statement替换为运算符。它们是不同的东西,在语言中有不同的用途,遵循不同的规则。换一个是不起作用。

您发布的表达方式:

isset($_POST['A']) ? header("Location: /LocationA") 
    : header("Location: /LocationB}");

与您尝试替换的if语句具有相同的效果。 原始代码片段中有一个if (isset($_POST['B']))在重写的代码中缺失。

不关心$_POST['B'],您可以编写如下代码:

if (condition) {
   //do something
} else {
    header(isset($_POST['A'] ? 'Location: /LocationA' : 'Location: /LocationB');
    exit();
}

或者,甚至更短:

header('Location: ' . (isset($_POST['A']) ? '/LocationA' : '/LocationB'));

答案 1 :(得分:0)

试试吧

isset($_POST['A']) 
? 
header("Location: /LocationA");  
: 
header("Location: /LocationB");  

exit;

我认为它有效。 :)