Лучшая практика PHP E_NOTICE - плохо ли проверять неопределенную переменную для значения?
С E_NOTICE
сообщения об ошибках включены, PHP не любит следующий код, если только переменные $mdDialog
а также $mdToast
уже определены:
if ($mdDialog || $mdToast) {
$ngMaterial = true;
}
Избежать E_NOTICE
ошибка, я должен написать:
if (isset($mdDialog) || isset($mdToast)) {
$ngMaterial = true;
}
Проблема в том, что с приведенным выше кодом, если у меня есть $mdDialog = false;
линия где-то раньше, утверждение будет правдивым, что не является идеей. Чтобы избежать этого, я должен написать:
if ((isset($mdDialog) && $mdDialog) || (isset($mdToast) && $mdToast)) {
$ngMaterial = true;
}
И это ооочень дольше и кажется чрезмерным, только чтобы избежать сообщения E_NOTICE.
Итак, вопрос в том, должен ли я заботиться об этих E_NOTICE
Сообщения? Что плохого в проверке значения переменной, которая может не существовать?
3 ответа
empty
может быть полезным в этом случае. Как ниже:
if (!empty($mdDialog) || !empty($mdToast)) {
$ngMaterial = true;
}
Подробнее о пустом.
Или, если переменная является строкой, вы также можете использовать это:
if(strlen($mdDialog) < 1 || strlen($mdToast) < 1){
$ngMaterial = true;
}
Вы всегда лучше избегать создания уведомлений, чем настройка error_reporting()
игнорировать их. Тем не менее, в подобных случаях почти всегда легче убедиться, что переменные установлены в начале, чем проверять, установлены ли они в каждом месте, к которому вы обращаетесь. Т.е. переменная никогда не устанавливается для ложного условия, если вы делаете что-то вроде этого:
if (some condition) {
$flag = true;
}
Вместо этого сделайте что-то вроде этого:
if (some condition) {
$flag = true;
} else {
$flag = false;
}
Или это:
$flag = false;
if (some condition) {
$flag = true;
}
Или это:
$flag = (some condition) ? true : false;
Или это:
$flag = (bool) (some condition);
Теперь вам не нужно isset()
или же empty()
и когда вы получите E_NOTICE
Это действительно имеет смысл.