是否可以简化isset?

时间:2016-08-30 14:40:38

标签: php boolean conditional-statements isset

我有很多带参数的函数,可以是bool或null。如果我们简化我的功能,我会遇到这样的事情:

funtion ($param) {
  if ($param) { 
    //true
  } else { 
    //false 
  }
}

然而,当我打电话给function(null);时,它显然会进入另一部分状态。所以我必须做

funtion ($param) {
   if (isset($param)) {
      if ($param) { 
        //true
      } else { 
        //false 
      }
   }
} 

对于每个类似的if条件,这有点烦人。

所以我的问题是:

是否有可能使用此类参数更快和/或没有其他功能来执行此类条件?

2 个答案:

答案 0 :(得分:3)

要仅对truefalse进行验证,请使用严格类型比较(===):

function check($param)
{
    if ($param === true) {
        // It's true. :)
    } else if ($param === false) {
        // It's false.. :o
    }
}

如果是null,则会忽略它。

答案 1 :(得分:1)

  

请阅读底部代码,了解最有用(但解释性最小)的功能。

以下功能解决了您的困境。如果$param为true或false,则return会返回$param的布尔版本(对于此类实例非常有用,如$ param是sting或整数等)。

否则,被定义为NULL值的函数不会返回任何内容。

类型清晰文本的示例:

<?php
        //Enter your code here, enjoy!
$test[] = NULL;
$test[] = true;
$test[] = false;
$test[] = "string";
$test[] = 45;

    function tester($param) {
      if(!is_null($param)){
          return (boolean)$param?"true":"false";
        }
        return "null";
    }

foreach($test as $row){
    print $row . " :: ". tester($row)."\n";

}

示例输出:

  

:: null
1 :: true
:: false
string :: true
45 ::   真

如果您想要返回实际类型而不是文本表示,可以使用精简版本轻松实现:

解决方案:

function ($param) {
      if(!is_null($param)){
          return (boolean)$param;
        }
       // not required but useful to keep for code clarity.
      //return null;
    }

可能的结果:

  

1(真)
0(假)
无效