最近我开始使用laravel。但我想知道为什么它因为未定义的索引而崩溃并抛出异常。
例如:
$ ARR = []; 返回$ arr 1;
这导致应用程序崩溃并返回代码500.这一点都不好。我不需要它崩溃,它应该返回null。
我怎么能处理这个?
其他建议用isset包装每一行,例如:
if(isset($arr[1]))
return $arr[1]
我无法浏览所有代码并使用isset包装每一行。这是一项艰苦的工作。
由于
答案 0 :(得分:5)
如果您害怕冗余,可以使用快捷方式:
echo $arr[1] ?? ''; // works in `PHP 7` only
对于Blade:
{{ $arr[1] or '' }}
这两个示例的工作原理如下:
if (isset($arr[1])) {
echo $arr[1];
} else {
echo '';
}
如果您仍在使用PHP 5
,则可以使用三元运算符:
echo isset($arr[1]) ? $arr[1] : '';
答案 1 :(得分:2)
你说这不是代码问题,而是Laravel问题..... 是 代码问题,如果你试图访问一个问题,PHP会发出通知不存在的数组元素....您可以选择禁止该通知,或者(如Laravel所做的那样)以干净的方式报告它;但它不是PHP问题,也不是Laravel问题;这是对草率编码的回应。如果它在Laravel之外没有问题,那就是因为你压制通知,而不是因为它不是问题。
如果你想要在数组中访问未定义的索引时想要返回null,那么我建议创建一个自定义错误处理程序来捕获它。
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if ($errno == E_NOTICE && strpos($errstr, 'Undefined offset') === 0) {
return null;
}
return false;
}
$old_error_handler = set_error_handler("myErrorHandler");
$arr=[];
var_dump($arr[1]);
当然,您必须将该逻辑与Laravel自己的错误处理例程
集成