Лучшая практика 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Это действительно имеет смысл.

Другие вопросы по тегам