Кажется, я не могу найти никакого обсуждения по этому поводу.
В JavaScript, чтобы проверить, если что-то существует, и использовать значение по умолчанию, если это не так:
var myvariable = mysetting || 3
В PHP, насколько я понимаю, то же самое можно сделать так:
$myvariable = $mysetting ?: 3;
Я полностью не согласен с этим? Я понимаю последствия неиспользования isset()
а также not_empty()
и все это, но если я просто хочу узнать, существует ли переменная и является ли она правдой, в противном случае используйте значение по умолчанию — я думаю, это должно работать. Есть ли в этом синтаксисе какие-то скрытые плохие вещи?
Потому что это не работает. Этот код будет по-прежнему бросать уведомление 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
годами, и старые привычки тяжело умирают.
Эти заявления не эквивалентны. Из того, что я нашел, javascript эквивалентен:
if (!mysetting) {
myvariable = 3;
} else {
myvariable = mysetting;
}
Тогда как эквивалентный оператор PHP с использованием тернарного оператора был бы:
$mysetting = isset($myvariable) ? $myvariable : 3;
иначе:
if( isset($myvariable) ) {
$mysetting = $myvariable;
} else {
$mysetting = 3;
}
Тернарный оператор по сути является сокращением для оператора if и else, и первый операнд интерпретируется как логическое выражение.