如何捕获此错误:“注意:未定义的偏移量:0”

时间:2011-03-21 04:24:57

标签: php error-handling try-catch

我想抓住这个错误:

$a[1] = 'jfksjfks';
try {
      $b = $a[0];
} catch (\Exception $e) {
      echo "jsdlkjflsjfkjl";
}

编辑:实际上,我在以下行中收到此错误: $parse = $xml->children[0]->children[0]->toArray();

6 个答案:

答案 0 :(得分:95)

您需要定义自定义错误处理程序,如:

<?php

set_error_handler('exceptions_error_handler');

function exceptions_error_handler($severity, $message, $filename, $lineno) {
  if (error_reporting() == 0) {
    return;
  }
  if (error_reporting() & $severity) {
    throw new ErrorException($message, 0, $severity, $filename, $lineno);
  }
}

$a[1] = 'jfksjfks';
try {
      $b = $a[0];
} catch (Exception $e) {
      echo "jsdlkjflsjfkjl";
}

答案 1 :(得分:22)

你不能使用try / catch块,因为这是一个错误,不是例外。

在使用之前始终尝试偏移:

if( isset( $a[ 0 ] ) { $b = $a[ 0 ]; }

答案 2 :(得分:9)

$a[1] = 'jfksjfks';
try {
  $offset = 0;
  if(isset($a[$offset]))
    $b = $a[$offset];
  else
    throw new Exception("Notice: Undefined offset: ".$offset);
} catch (Exception $e) {
  echo $e->getMessage();
}

或者,没有创建非常临时的异常的低效率:

$a[1] = 'jfksjfks';
$offset = 0;
if(isset($a[$offset]))
  $b = $a[$offset];
else
  echo "Notice: Undefined offset: ".$offset;

答案 3 :(得分:9)

我知道这是2016年,但万一有人来到这个帖子。

您可以使用array_key_exists($index, $array)方法以避免发生异常。

$index = 99999;
$array = [1,2,3,4,5,6];

if(!array_key_exists($index, $array))
{
    //Throw myCustomException;
}

答案 4 :(得分:0)

通常情况下,您无法通过try-catch块捕获通知。但您可以将通知转换为例外!使用这种方式:

"<b>Notice</b>:"

此外,您可以使用此功能捕获警告。只需将函数名称更改为get_warning,然后将"<b>Warning</b>:"更改为{{1}}。

注意:该函数将捕获包含以下内容的无辜输出:

&LT b取代;通知及LT; / B个:

但是要摆脱这个问题,只需将其改为:

&LT b取代;注意:其中/ B个

答案 5 :(得分:-4)

我确定为什么错误投掷,但我修复了一些..

in html2pdf.class.php

第2132行

//FIX:
$ctop=$corr[$y][$x][2]<=count($sw)?$corr[$y][$x][2]:count($sw);
$s = 0; for ($i=0; $i<$ctop; $i++) {$s+= array_key_exists($x+$i, $sw)? $sw[$x+$i]:0;}

相同在第2138行:

//FIX:

$ctop=$corr[$y][$x][2]<=count($sw)?$corr[$y][$x][2]:count($sw);
 for ($i=0; $i<$ctop; $i++) {

问题数组$ sw没有$ corr [$ y] [$ x] [2]的键,所以我修复了最大计数($ sw)的循环来修复.. 我不知道这是否会产生另一个连续性,但我解决了我的问题,我没有任何更多错误..

所以我希望对你有用.. !!! Beats Reguards