У меня есть следующий код в моем PHP-скрипте:
if ( $x != 'some_val_1' && $y['index']->title != "some_val_2" && $y['index']->title != "some_val_3" ) {
// Do something.
}
В коде, показанном выше, index
может / не может быть установлен и, следовательно, когда он не установлен, этот код выдает уведомление php.
Я изменил это на:
if (isset($y['index']->title)) {
if ( $x != 'some_val_1' && $y['index']->title != "some_val_2" && $y['index']->title != "some_val_3" ) {
// Do something.
}
}
Однако, так как часть «Делай что-то» настроена на работу, когда isset($y['index']->title
является не равный в some_val_2
а также some_val_3
выше, не работает, потому что isset()
добавленное условие пропускает код.
Так что теперь скрипт не выдает уведомление, а за счет полного изменения условия на что-то нежелательное.
Как я могу изменить этот код, чтобы не выдавать уведомление PHP?
Вы можете обращаться с этим по-разному, я инициализирую переменные, если они не определены:
if (! isset($y['index']->title)) {
$y['index']->title = '';
}
if ( $x != 'some_val_1' && $y['index']->title != "some_val_2" && $y['index']->title != "some_val_3" ) {
// Do something.
}
Я предпочитаю этот путь, потому что мне не нужно менять свой код и добавлять if
условия (с isset
например) во всей моей программе. Я просто добавляю условия вверху моего кода.
Поскольку вы имеете дело с массивом объектов, вы можете использовать функцию array_key_exists()
,
Ваш код будет выглядеть так:
if ( array_key_exists('index',$y) && $x != 'some_val_1' && $y['index']->title != 'some_val_2' && $y['index']->title != 'some_val_3' ) {
// Do something.
}
Вы можете прочитать больше об этом здесь: http://php.net/manual/en/function.array-key-exists.php
Вы можете попробовать использовать isset
& in_array
в этом сценарии.
if ( $x != 'some_val_1'
&& isset($y['index']->title)
&& !in_array($y['index']->title, array("some_val_2", "some_val_3") ) ) {
// Do something.
}
Преимущество использования in_array
является то, что вы проверяете чувствительность к регистру, передавая TRUE / FALSE
в третьем параметре.