Использование PHP 5.3?: Оператор
На этой тестовой странице:
$page = (int) $_GET['page'] ?: '1';
echo $page;
Я не понимаю вывод, который я получаю, когда страница undefined:
Request Result
?page=2 2
?page=3 3
?page= 1
? error: Undefined index page
Почему сообщение об ошибке? Это PHP 5.3; почему он не отвечает "1"?
Ответы
Ответ 1
Правильный способ (на мой взгляд):
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
Даже если вы использовали новый стиль, у вас возникли бы проблемы с ?page=0
(как 0
, оцененный как false). "Новое" не всегда лучше... вы должны знать, когда его использовать.
Ответ 2
К сожалению, вы не можете использовать его для целей, которые вы хотели бы использовать для:
Expression expr1?: expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.
Итак, вам все равно придется использовать isset или empty() - оператор ?:
не включает проверку isset. Что вам нужно использовать:
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
Ответ 3
Только для полноты, другой способ добиться этого - вывести ранг оператора:
$page = (int)$_GET["page"] or $page = 1;
Многие воспринимают это как нечитаемое, хотя оно короче, чем isset().
Или, если вы используете входные объекты или любой другой класс утилиты:
$page = $_GET->int->default("page", 1);
Ответ 4
Это потому, что вы пытаетесь придумать что-то, что undefined: (int) $_GET ['page']
Удалите (int) или задайте тип после условной строки.
Ответ 5
Если ваша проблема связана с раздуванием, как насчет вспомогательной функции?
function get_or($index, $default) {
return isset($_GET[$index]) ? $_GET[$index] : $default;
}
то вы можете просто использовать:
$page = get_or('page', 1);
который чист и обрабатывает значения undefined.