-1

我经常设置如下代码:

if ($arr) {
    foreach ($arr as $a) {
        // Code stuffs
    }
}

如果$arr不存在,那一点也不重要,所以我很想使用每个人最喜欢的抑制器(@),而不是用那个 if 语句弄乱我的代码。

  • 如果 check 和 foreach 在同一行,是否有某种速记方法可以做到这一点?
  • 在这种情况下抑制错误有什么大问题吗?
4

4 回答 4

6

我会建议一种替代方法,该方法源自我在学校期间形成的 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 个月之后!

于 2013-09-03T14:30:01.493 回答
2

你总是可以做一个“速记”功能

function checkArr($arr){
    return isset($arr) ? ((count($arr) > 0) ? $arr : array()) : array();
}

foreach(checkArr($arr) as $a){
    echo $a;
}

我的 2 美分。

于 2013-09-03T14:34:15.750 回答
0

采用:

if ((!isset($arr)) || (!is_array($arr)) $arr = array();

foreach ($arr as $a) 
{
        // Code stuffs
}

我知道,那if仍然存在,但你没有整个循环

于 2013-09-03T14:27:22.737 回答
-1

你可以这样写:

foreach((array)$arr as $a) {
    // ...
}

将未定义的变量转换为数组将产生一个空数组。当 $arr 值是布尔类型(即 false)时,这将不起作用。

于 2013-09-03T14:28:09.457 回答