Задать вопрос

Использование тернарного оператора ?: с подавлением ошибки?

Нормально ли использовать $c = @$a ? : 'default';вместо$c = isset($a) ? $a : 'default';?

И вроде ошибка, всего лишь, уровня E_NOTICE, а @ смущает все равно. С другой стороны — удобно же!

Кто как считает?

UPD1: Так как empty() игнорирует неопределенную переменную, а «Таблица сравнения типов в PHP» говорит, что !empty() полностью соответствует нестрогому булеву, то корректнее была бы замена:$c = !empty($a) ? $a : 'default'; на $c = @$a ? : 'default';
UPD2: (так как никто не читает уточнения). Рассматриваются, как основные варианты, так же доступ к неопределенным ключам массивов и магическим свойствам объекта, которые могут быть заданы извне.
$e = !empty($array['doubtful']['element']) ? $array['doubtful']['element'] : 'default';
// and
$e = @$array['doubtful']['element'] ? : 'default';

$p = !empty($object->magicProperty) ? $object->magicProperty : 'default';
// and
$p = @$object->magicProperty ? : 'default';
  • Вопрос задан
  • 5310 просмотров
Подписаться 5 Оценить 2 комментария
Ответ пользователя Stdit К ответам на вопрос (12)
Stdit
@Stdit
Неудивительно, что вас смущает использование «собаки», нутро верно подсказывает, что это — умалчивание ошибки и во многих случаях используется как костыль. А isset, empty и is_null — это очевидная логика, причем разная, и более чистый и понятный код. Я бы рекомендовал забыть что «собака» вообще существует, пока нужда остро не прижмет в каком-нибудь стареньком проекте.
Ответ написан