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

meo*_*hia 67 php error-handling try-catch

我想抓住这个错误:

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

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

zer*_*kms 99

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

<?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";
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您关闭了错误报告,则此方法将无法正常工作,就像您在生产中一样。 (2认同)
  • @Rehmat 不存在“非关键警告”这样的东西:如果发出警告 - 当前代码已经被破坏。它可能在大多数时候或此时此刻意外地工作,但不能保证。 (2认同)

Mac*_*ade 22

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

始终在使用前尝试偏移:

if( isset( $a[ 0 ] ) { $b = $a[ 0 ]; }
Run Code Online (Sandbox Code Playgroud)

  • 1.这不是错误,而是通知2.我们可以将通知/警告/错误转换为异常 (18认同)

ggd*_*ras 10

我知道这是2016年,但万一有人上了这篇文章.

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

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

if(!array_key_exists($index, $array))
{
    //Throw myCustomException;
}
Run Code Online (Sandbox Code Playgroud)


Pri*_*ner 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();
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我应该提一下,创建一个异常非常低效,这样你就可以捕获它并立即使用它,特别是当它更容易将`echo`放在`else`子句中时.这并没有减损你的答案,但我认为它需要指出. (9认同)
  • 这是非常正确的,我不喜欢写它但它足以满足他原来的问题! (3认同)
  • 它是合适的,如果它真的是一个异常,效率并不重要,如果永远不会发生这种情况. (2认同)