最近我开始使用laravel。但我想知道为什么它会因为未定义的索引而崩溃并抛出异常。
例如:
$arr=[];return$arr1;
这导致应用程序崩溃并返回代码500。这一点都不好。我不需要它崩溃,它应该只返回null。
我该怎么办?
其他人建议用isset包裹每一行,例如:
if(isset($arr[1]))
return $arr[1]
我不能遍历所有的代码并用isset包装每一行。这是一项艰巨的工作。
感谢
如果你害怕冗余,你可以使用快捷方式:
echo $arr[1] ?? ''; // works in `PHP 7` only
对于刀片:
{{ $arr[1] or '' }}
这两个例子的工作方式如下代码:
if (isset($arr[1])) {
echo $arr[1];
} else {
echo '';
}
如果您仍在使用PHP 5
,则可以使用三元运算符:
echo isset($arr[1]) ? $arr[1] : '';
你说这不是代码问题,而是Laravel问题。。。。。是代码问题,如果您试图访问不存在的数组元素,PHP会发出通知。。。。你可以选择压制该通知,或者(像拉拉威尔那样)以干净的方式报告;但这不是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自己的错误处理例程集成
演示