Как мне обойти уведомления о неопределенном смещении 0 в php

#php

#php

Вопрос:

Как мне обойти уведомления о неопределенном смещении 0 в php

У меня есть несколько инструкций в php, которые содержат некоторые массивы, которые вызывают эти уведомления. Но для того, чтобы исправить это, я использую empty() в php .

 $val= array(    
    'codes' => $this->arr1['BAC'],
    'lines' => $this->arr1['array1'][0]['RACE']  // this is the statement causing undefined offset 0
);

if(!empty( $this->arr1['array1'])){
$val= array(    
    'codes' => $this->arr1['BAC'],
    'lines' => $this->arr1['array1'][0]['RACE']  // this is the statement causing undefined offset 0
);
}
  

было бы рекомендовано вышеуказанное. Но мой вопрос, если я помещу их в if() .Можно ли получить доступ к $ val вне if ()

Ответ №1:

Протестируйте isset($this->arr1['array1']['0']['RACE']) , и вы узнаете, можете ли вы его использовать или нет.

Вы также можете отключить уведомления (хотя и не рекомендуется):

 error_reporting(E_ALL ^ E_NOTICE);
  

Комментарии:

1. 1 для isset, -1 для отключения уведомлений, которые очень ценны во время разработки.

2. Я отредактировал свой пост, чтобы упомянуть, что это не рекомендуется. Я бы сам не стал использовать этот подход, но было бы полезно знать, что их можно отключить.

3. Но использование isset() делает код длиннее и сложнее.. В одном разделе моего приложения это сделало код нечитаемым, поскольку их слишком много isset() .. Не уверен, есть ли какая-либо альтернатива или я могу просто игнорировать все эти уведомления..

Ответ №2:

Проверьте, установлены ли индексы массива перед использованием

     if(isset($this->arr1['array1'][0]['RACE']))
    {
      $val= array(    
        'codes' => $this->arr1['BAC'],
        'lines' => $this->arr1['array1'][0]['RACE']  // this is the statement causing undefined offset 0
    );

    }
  

Ответ №3:

Область видимости переменной в PHP находится на уровне функции. Определение переменной внутри конструкции if() / while () / for() / do () — это то же самое, что определять их вне конструкции. Однако переменные не будут вытекать ни из функции, ни в функцию:

 $x = 'a';
if (1 == 1) {
   echo $x; // 'a'
   $y = 'b';
}
echo $y; // 'b'

function p() {
   echo $y; // null/blank/does not exist
   $z = 'c';
}
echo $z; // null/blank/does not exist
  

Ответ №4:

К $ val можно получить доступ за пределами if, если выполняется if .