Использование вложенных троичных операторов
Я пытаюсь использовать 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
Это именно то, ради чего.
Ответ 6
В качестве php 7
мы можем использовать Оператор Null-коалесценции
$selectedTemplate = $_POST['selectedTemplate']) ?? $_GET['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;