В JavaScript у меня есть привычка использовать следующую резервную оценку
var width = parseInt(e.style.width) || e.offsetWidth() || 480
значение width
получит последнее ненулевое значение (не null …). Однако в php я не могу писать
$a = $_GET['id'] || 1;
Я должен написать так
$a = $_GET['id']?$_GET['id']:1;
Что плохо, потому что $_GET['id']
оценивается дважды
Какие-либо предложения?
Если у вас есть PHP 5.3, вы можете просто сделать:
$a = $_GET['id'] ?: 1;
Как из руководства PHP:
Начиная с PHP 5.3, можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.
Если у вас нет PHP 5.3 или выше, вам придется использовать предложение Сарфраза (или лучше, delphist). Однако в более крупных приложениях я склонен иметь переменные запроса, завернутые таким образом, что я могу указать значение по умолчанию в аргументе функции, возвращающей запрос. Это имеет то преимущество, что он чище (проще понять) и не генерирует предупреждений, если индекс не существует в переменной $ _GET, поскольку я могу использовать такие вещи, как isset
для проверки наличия индекса массива. Я получаю что-то вроде:
его лучше быть
$a = isset($_GET['id']) ? $_GET['id'] : 1;
К сожалению, PHP не поддерживает этот синтаксис. Лучшее, что вы можете сделать, это использовать трёхмерный оператор, например, ваш пример:
$a = $_GET['id'] ? $_GET['id'] : 1;
Единственный вариант, который подходит для эквивалентного материала, – это использование условия Switch
.
Поиск в массиве в одном массиве – это такое предельное количество времени, что это действительно не имеет значения.
Если вы каскадируете несколько массивов, было бы быстрее сохранить значение в переменной temp:
$tempId = $example['this']['is']['an']['example']['where']['it\'s']['worth']['storing']; $a = $tempId ? $tempId : 1;
В противном случае $a = $_GET['id'] ? $_GET['id'] : 1;
$a = $_GET['id'] ? $_GET['id'] : 1;
просто отлично.
PHP 5.3 поддерживает следующий синтаксис:
$a = $_GET['id'] ?: 1;
Из документации :
Начиная с PHP 5.3, можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.