我正在使用 Symfony 2 构建一个应用程序,我想知道,当我尝试读取不存在的数组中的索引时如何处理错误?可悲的是,这种错误不会引发异常,所以我不能真正使用 try-catch 块。
例子:
$test = array();
$test["323"]; // Undefined index error!
请,想法如何处理这个错误?
更新:我已经看到了很多解决方案isset
。这样做的问题是我必须在每次访问数组索引时都这样做。谁能给我一个更干燥的解决方案?
我正在使用 Symfony 2 构建一个应用程序,我想知道,当我尝试读取不存在的数组中的索引时如何处理错误?可悲的是,这种错误不会引发异常,所以我不能真正使用 try-catch 块。
例子:
$test = array();
$test["323"]; // Undefined index error!
请,想法如何处理这个错误?
更新:我已经看到了很多解决方案isset
。这样做的问题是我必须在每次访问数组索引时都这样做。谁能给我一个更干燥的解决方案?
两个都:
if(isset($test["323"])){
//Good
}
和
if(array_key_exists('123', $test)){
//Good
}
将允许您在尝试使用它之前检查是否定义了数组索引。这不是 Symfony 特有的错误。这是一个常见的 PHP 警告,每当您尝试访问不存在的数组元素时就会出现这种警告。
$val = isset($test["323"]) ? $test["323"] : null;
一个选项是使用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();
您可以看到我们将“关键”代码段“包裹”在set_error_handler()
和周围restore_error_handler()
。有问题的代码可以小到一行,也可以大到整个脚本。当然,临界区越大,错误处理程序就必须越“智能”。
使用array_key_exists(),比如
if (array_key_exists('123', $test)) {
echo "it exists";
}
你可以用 isset 捕捉到这个 bx:
if(isset($test["323"])){
//The value fo this key is set.
}
可能是你想实现这个?
$test = array();
$test[]="323";
echo $test[0];//323
尝试/捕获未定义或许多 php 错误的简单方法。
try{
set_error_handler(function($errno, $errstr, $errfile, $errline, array $errcontext){
if (0 === error_reporting()) { return false; }
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
});
$data = $json['name']; ---> Undefined Index name
}catch(Exception $e){
//Perform Furthur action
}