Использование вложенных троичных операторов

Я пытаюсь использовать isset() в вложенной форме, как показано ниже:

isset($_POST['selectedTemplate'])?$_POST['selectedTemplate']:isset($_GET['selectedTemplate'])?$_GET['selectedTemplate']:0

Но кажется, что я что-то упускаю. Может ли кто-нибудь помочь мне, как это сделать?

Ответ 1

Оберните его в круглые скобки:

$selectedTemplate = isset($_POST['selectedTemplate'])
                  ? $_POST['selectedTemplate']
                  : (
                       isset($_GET['selectedTemplate'])
                       ? $_GET['selectedTemplate']
                       : 0
                  );

Или даже лучше, используйте правильную инструкцию if/else (для удобства):

$selectTemplate = 0;

if (isset($_POST['selectedTemplate'])) {
    $selectTemplate = $_POST['selectedTemplate'];
} elseif (isset($_GET['selectedTemplate'])) {
    $selectTemplate = $_GET['selectedTemplate'];
}

Однако, как указывали другие, вам будет проще использовать $_REQUEST:

$selectedTemplate = isset($_REQUEST['selectedTemplate'])
                  ? $_REQUEST['selectedTemplate']
                  : 0;

Ответ 2

У вас может быть проще просто использовать переменные $_REQUEST:

"$ _ REQUEST - ассоциативный массив, который по умолчанию содержит содержимое $_GET, $_POST и $_COOKIE."

http://us2.php.net/manual/en/reserved.variables.request.php

Ответ 3

Проще читать, если мы пишем тройной следующим образом:

$myvar = ($x == $y)
  ?(($x == $z)?'both':'foo')
  :(($x == $z)?'bar':'none');

Но тройные операторы - это короткие, эффективные способы написания простых операторов if. Они не построены для гнездования.:)

Ответ 4

Немного исследуйте здесь, и я думаю, я нашел реальный ответ:)

Пример кода:

<?php

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


var_dump(
    isset($test['a'])
        ? $test['a']
        : isset($test['b'])
            ? $test['b']
            : "default"
);

Будьте внимательны к круглым скобкам, которые я положил.

Я думаю, вы ожидаете, что получите подобное поведение:

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

Но! Реальное поведение выглядит так:

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

Общая ошибка заключалась в том, что вы пропустили уведомление: Undefined index.

Онлайн-оболочка.

Ответ 5

Вместо тройного с двусмысленным приоритетом вы можете просто использовать $_REQUEST вместо fiddly $_GET и $_POST зондирования:

 isset($_REQUEST['selectedTemplate']) ? $_REQUEST['selectedTemplate'] : 0

Это именно то, ради чего.

Ответ 7

Я считаю, что это сработает:

$test = array();
$test['a'] = 123;
$test['b'] = NULL;


$var = (isset($test['a']) ? $test['a'] : (!isnull($test['b']) ? $test['b'] : "default"));

echo $var;