使用嵌套的三元运算符

sik*_*kas 24 php

我一直试图以isset()嵌套的形式使用,如下所示:

isset($_POST['selectedTemplate'])?$_POST['selectedTemplate']:isset($_GET['selectedTemplate'])?$_GET['selectedTemplate']:0
Run Code Online (Sandbox Code Playgroud)

但似乎我错过了一些东西.任何人都可以帮我怎么做?

Jos*_*ber 48

用括号括起来:

$selectedTemplate = isset($_POST['selectedTemplate'])
                  ? $_POST['selectedTemplate']
                  : (
                       isset($_GET['selectedTemplate'])
                       ? $_GET['selectedTemplate']
                       : 0
                  );
Run Code Online (Sandbox Code Playgroud)

或者甚至更好,使用适当的if/ else声明(为了可维护性):

$selectTemplate = 0;

if (isset($_POST['selectedTemplate'])) {
    $selectTemplate = $_POST['selectedTemplate'];
} elseif (isset($_GET['selectedTemplate'])) {
    $selectTemplate = $_GET['selectedTemplate'];
}
Run Code Online (Sandbox Code Playgroud)

但是,正如其他人所指出的那样:您可以更轻松地使用$_REQUEST:

$selectedTemplate = isset($_REQUEST['selectedTemplate'])
                  ? $_REQUEST['selectedTemplate']
                  : 0;
Run Code Online (Sandbox Code Playgroud)

  • 只需注意:`$ _REQUEST`需要的不仅仅是`$ _POST`和`$ _GET`而且订单可能会有所不同. (2认同)
  • @CamilleGoudeseune-C / C ++默认对三元表达式使用右联想,而PHP默认使用左联想。实际上,左关联几乎从来都不是您想要的,因此PHP的默认设置实际上没有多大意义。实际上,[PHP 7.4中已弃用此功能](https://wiki.php.net/rfc/ternary_associativity)。 (2认同)

Ade*_*rsh 8

截至PHP 7我们可以使用Null 合并运算符

$selectedTemplate = $_POST['selectedTemplate'] ?? $_GET['selectedTemplate'] ?? 0;
Run Code Online (Sandbox Code Playgroud)


Ser*_*hik 5

在这里稍微调查一下,我想,我找到了真正的答案:)

示例代码:

<?php

$test = array();
$test['a'] = "value";


var_dump(
    isset($test['a'])
        ? $test['a']
        : isset($test['b'])
            ? $test['b']
            : "default"
);
Run Code Online (Sandbox Code Playgroud)

注意我放的圆括号。

我想,您正在等待获得类似的行为:

var_dump(
    isset($test['a'])
        ? $test['a']
        : (isset($test['b'])  // <--  here
            ? $test['b']
            : "default")      // <--  and here
);
Run Code Online (Sandbox Code Playgroud)

但!实际行为如下所示:

var_dump(
    (isset($test['a'])        // <--  here
        ? $test['a']
        : isset($test['b']))  // <--  and here
            ? $test['b']
            : "default"
);
Run Code Online (Sandbox Code Playgroud)

一般错误是,您错过了通知:Undefined index

在线壳