使用SYmfony处理PHP中的"未定义索引"

Enr*_*ent 2 php error-handling exception dry symfony

我正在使用Symfony 2构建一个应用程序,我想知道,当我尝试读取不存在的数组中的索引时,如何处理错误?遗憾的是,这种错误不会抛出异常,因此我无法真正使用try-catch块.

例:

$test = array();
$test["323"];       // Undefined index error!
Run Code Online (Sandbox Code Playgroud)

请,想法如何处理这个错误?

更新:我见过很多解决方案isset.这个问题是我必须对每个数组索引的访问都这样做.谁能为我提供更干的解决方案?

Way*_*tty 13

都:

if(isset($test["323"])){
   //Good
}
Run Code Online (Sandbox Code Playgroud)

if(array_key_exists('123', $test)){
   //Good
}
Run Code Online (Sandbox Code Playgroud)

允许您在尝试使用数组索引之前检查是否已定义数组索引.这不是Symfony特定的错误.每当您尝试访问不存在的数组元素时,都会发生常见的PHP警告.

$val = isset($test["323"]) ? $test["323"] : null;
Run Code Online (Sandbox Code Playgroud)


geo*_*gas 7

一种选择是使用set_error_handler()以某种方式模拟异常.以下是一个示例用法,但我确信您可以根据具体用例进行调整:

function my_error_handler($errno,$errstr)
  {
  /* handle the issue */
  return true; // if you want to bypass php's default handler
  }

$test = array();
set_error_handler('my_error_handler');
$use_it=$test["323"]; // Undefined index error!
restore_error_handler();
Run Code Online (Sandbox Code Playgroud)

你可以看到,我们"包装"我们的"关键"围绕一段代码set_error_handler()restore_error_handler().有问题的代码可以像一行一样小,就像整个脚本一样大.当然,临界区越大,错误处理程序就越"智能".