Intereting Posts
PHP: Simple Dom Parser Найдите класс Nth Element Exist Ошибка синтаксиса PHP … неожиданный T_VARIABLE? Использование XAMPP-phpmyadmin с одновременной установкой MYSQL Как динамически заполнять параметры в выпадающих списках на основе выбора в другом раскрывающемся списке? Лучший порядок результатов поиска mysql / php настоящая escape-строка и PDO Как получить доступ к контейнеру службы в глобальной вспомогательной функции symfony2 (услуге)? Элементы подсчета в каждом вспомогательном массиве в php Как получить текст статьи по идентификатору статьи в Joomla? как я могу заполнить значение dropdownbox при выборе значения другого веб-сайта в php Как отображать категории и конечные подкатегории с помощью PHP и MySQL? удалить cookie в php $ _SERVER = ip, который не является моим сервером Codeigniter отправлять почту с помощью gmail не работает, просто перезагружая Проверьте слово после символа '@' в PHP

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

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

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

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

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

 $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; 

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

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

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

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

Пример кода:

 <?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" ); 

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

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

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

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

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

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

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

Это именно то, для чего оно предназначено.

Начиная с php 7 мы можем использовать оператор Null-коалесценции

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

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

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