оператор if — логическая обработка в переполнении стека

У меня есть следующий код в моем 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?

1

Решение

Вы можете обращаться с этим по-разному, я инициализирую переменные, если они не определены:

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 например) во всей моей программе. Я просто добавляю условия вверху моего кода.

0

Другие решения

Поскольку вы имеете дело с массивом объектов, вы можете использовать функцию 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

0

Вы можете попробовать использовать 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 в третьем параметре.

0