PHP, почему никто не использует оператор?:?

Кажется, я не могу найти никакого обсуждения по этому поводу.

В JavaScript, чтобы проверить, если что-то существует, и использовать значение по умолчанию, если это не так:

var myvariable = mysetting || 3

В PHP, насколько я понимаю, то же самое можно сделать так:

$myvariable = $mysetting ?: 3;

Я полностью не согласен с этим? Я понимаю последствия неиспользования isset() а также not_empty() и все это, но если я просто хочу узнать, существует ли переменная и является ли она правдой, в противном случае используйте значение по умолчанию — я думаю, это должно работать. Есть ли в этом синтаксисе какие-то скрытые плохие вещи?

2

Решение

Потому что это не работает. Этот код будет по-прежнему бросать уведомление Notice: Undefined variable: mysetting in C:\wamp\www\x.php on line, который может быть виден пользователю, в зависимости от настроек PHP. Кроме того, это будет работать. Если уведомления подавляются, то конечный результат верен.

Таким образом, чтобы обойти это, вы можете использовать isset, которая на самом деле не является функцией, а является языковой конструкцией и специально предназначена для этой проверки:

$myvariable = isset($mysetting)? $mysetting: 3;

Или вы можете подавить уведомление, используя @ оператор:

$myvariable = @$mysetting ?: 3;

Для этого конкретного случая, возможно, это приемлемо, но в целом использование @ многие нахмурились. Лично я бы предпочел использовать еще пару персонажей и сделать так, чтобы они были менее «грязными», но это вопрос мнения.

Еще одна причина, по которой люди могут его не использовать, заключается в том, что он относительно новый (PHP 5.3). Не каждый может знать об этом новом синтаксисе или чувствовать себя комфортно с ним. Они привыкли к isset годами, и старые привычки тяжело умирают.

2

Другие решения

Эти заявления не эквивалентны. Из того, что я нашел, javascript эквивалентен:

if (!mysetting) {
myvariable = 3;
} else {
myvariable = mysetting;
}

Тогда как эквивалентный оператор PHP с использованием тернарного оператора был бы:

$mysetting = isset($myvariable) ? $myvariable : 3;

иначе:

if( isset($myvariable) ) {
$mysetting = $myvariable;
} else {
$mysetting = 3;
}

Тернарный оператор по сути является сокращением для оператора if и else, и первый операнд интерпретируется как логическое выражение.

0

По вопросам рекламы [email protected]