#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 .