Ridzhi
@Ridzhi
На вершине пищевой цепочки

Обращение к несуществующему элементу массива. Правильно VS Лаконично?

Допустим есть массив-конфиг php приложения. Есть настройки debug:

'debug' => array(
        'enabled' => true,
        'level' =>  -1,
    ),


Обрабатывая опцию enabled, я могу написать так:
// Вариант 1 - Длинный и наверное правильный
if(array_key_exists('enabled',$debug)) {
    $isDisplayErrors = $debug['enabled'];
} else {
    $isDisplayErrors = false; // default
}
ini_set('display_errors', $isDisplayErrors);

//Вариант 2 - Короче и наверное правильный
ini_set('display_errors', ((array_key_exists('enabled',$debug)) ? $debug['enabled'] : false);

//Вариант 3 
ini_set('display_errors', $debug['enabled'] === true);


Вариант номер 3, который мне очень нравится лаконичностью, вызовет notice, если ключ будет отсутствовать. Концептуально, что еще плохого в данном подходе, помимо засорения вывода нотисами в дебаг режиме ?
  • Вопрос задан
  • 5522 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Правильный вариант:
$isDisplayErrors = isset($debug['enabled']) && $debug['enabled'];
// или более понятно
$isDisplayErrors = isset($debug['enabled']) ? 
                                    $debug['enabled'] : false;
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@VeMax
А вариант с isset($array['element']) ?
Ответ написан
AMar4enko
@AMar4enko
Я всегда пользовался @$array['key']
Если нужно в результате именно boolean, то !!@$array['key']
Ответ написан
Комментировать
scipe
@scipe
Senior DevOps Engineer
В конфиге приложения $isDisplayErrors = array(); - то есть объявите переменную!
Ответ написан
Комментировать
Воспользуйтесь функцией empty():
ini_set('display_errors', !empty($debug['enabled']));
Ответ написан
@zloyusr
Вариант от Никиты Попова одного из core разработчиков php:
($_=& $debug['enable']) ?: false;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы