我经常设置如下代码:
if ($arr) {
foreach ($arr as $a) {
// Code stuffs
}
}
如果$arr
不存在,那一点也不重要,所以我很想使用每个人最喜欢的抑制器(@
),而不是用那个 if 语句弄乱我的代码。
- 如果 check 和 foreach 在同一行,是否有某种速记方法可以做到这一点?
- 在这种情况下抑制错误有什么大问题吗?
我经常设置如下代码:
if ($arr) {
foreach ($arr as $a) {
// Code stuffs
}
}
如果$arr
不存在,那一点也不重要,所以我很想使用每个人最喜欢的抑制器(@
),而不是用那个 if 语句弄乱我的代码。
我会建议一种替代方法,该方法源自我在学校期间形成的 C++ 和 Java。
如果您有疑问,请在成本低廉的情况下初始化变量。
例如,在您的情况下,我将执行以下操作
//early on, *before any other possible use of $arr*!
$arr = array();
//do something else, remake $arr or not, whatever!
foreach ($arr as $a) {
// Code stuffs
}
正确、简单、易读、一目了然。如果您之前没有初始化 $arr,您可能想知道它是从哪里诞生的……尤其是在您关闭此项目并需要一些调试之后的 6 个月之后!
你总是可以做一个“速记”功能
function checkArr($arr){
return isset($arr) ? ((count($arr) > 0) ? $arr : array()) : array();
}
foreach(checkArr($arr) as $a){
echo $a;
}
我的 2 美分。
采用:
if ((!isset($arr)) || (!is_array($arr)) $arr = array();
foreach ($arr as $a)
{
// Code stuffs
}
我知道,那if
仍然存在,但你没有整个循环
你可以这样写:
foreach((array)$arr as $a) {
// ...
}
将未定义的变量转换为数组将产生一个空数组。当 $arr 值是布尔类型(即 false)时,这将不起作用。