Синтаксис PHP. Булевы операторы, тернарный оператор и JavaScript

В 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 в противном случае.