Синтаксис PHP. Булевы операторы, троичные операторы и JavaScript - PullRequest
2 голосов
/ 21 февраля 2011

В JavaScript у меня есть привычка использовать следующую альтернативную оценку

var width = parseInt(e.style.width) || e.offsetWidth() || 480

, означающую, что width получит последнее ненулевое (не нулевое ...) значение. Однако в php я могуне пишите

$a = $_GET['id'] || 1;

Я должен написать так

$a = $_GET['id']?$_GET['id']:1;

Что плохо, потому что $_GET['id'] оценивается дважды

Есть предложения?

Ответы [ 5 ]

4 голосов
/ 21 февраля 2011

Если у вас есть PHP 5.3, вы можете просто сделать:

$a = $_GET['id'] ?: 1;

Как и в руководстве по PHP:

Начиная с PHP 5.3, можно опустить среднюю частьтроичного оператора.Выражение expr1?: Expr3 возвращает expr1, если expr1 оценивается как TRUE, и expr3 в противном случае.

Если у вас нет PHP 5.3 или выше, вам придется использовать предложение Сарфраза (или, лучше, дельфиста).Однако в более крупных приложениях я склоняюсь к тому, чтобы переменные запроса были обернуты таким образом, чтобы я мог указать значение по умолчанию в аргументе функции, получающей запрос.Преимущество этого метода в том, что он чище (проще для понимания) и не генерирует предупреждений, если индекс не существует в переменной $ _GET, поскольку я могу использовать такие вещи, как isset, чтобы проверить, существует ли индекс массива.Я получаю что-то вроде:

3 голосов
/ 21 февраля 2011

лучше быть

$a = isset($_GET['id']) ? $_GET['id'] : 1;
1 голос
/ 21 февраля 2011

PHP 5.3 поддерживает следующий синтаксис:

$a = $_GET['id'] ?: 1;

С документация :

Начиная с PHP 5.3, можно опустить серединучасть троичного оператора.Выражение expr1?: Expr3 возвращает expr1, если expr1 оценивается как TRUE, и expr3 в противном случае.

1 голос
/ 21 февраля 2011

Поиск в массиве в одном массиве занимает столько времени, что это действительно не имеет значения.

Если вы каскадируете несколько массивов, было бы быстрее сохранить значение во временной переменной:

$tempId = $example['this']['is']['an']['example']['where']['it\'s']['worth']['storing'];

$a = $tempId ? $tempId : 1;

В противном случае $a = $_GET['id'] ? $_GET['id'] : 1; просто отлично.

1 голос
/ 21 февраля 2011

К сожалению, PHP не поддерживает этот синтаксис. Лучшее, что вы можете сделать, это использовать троичный оператор, как в вашем примере:

$a = $_GET['id'] ? $_GET['id'] : 1;

Единственный вариант, который приходит на ум для эквивалентного материала - это использование условия Switch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...