在foreach循环之前检查变量,速记?

时间:2013-09-03 14:23:56

标签: php

我的代码设置如下:

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

如果$arr不存在,那丝毫没关系,所以我很想使用每个人最喜欢的抑制器(@)而不是用if if语句来破坏我的代码

  • 如果在同一条线上检查和预告,是否有某种简写要做?
  • 在此上下文中抑制错误的任何大问题?

4 个答案:

答案 0 :(得分: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个月之后!

答案 1 :(得分:2)

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

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

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

我的2¢。

答案 2 :(得分:0)

使用:

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

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

我知道,if仍在那里,但你没有完整的循环

答案 3 :(得分:-1)

你可以这样写:

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

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