【问题标题】:is it possible to simplify isset?可以简化isset吗?
【发布时间】:2016-08-30 14:40:38
【问题描述】:

我有很多函数的参数可以是布尔值或空值。如果我们简化我的功能,我会得到这样的结果:

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

但是,当我调用 function(null); 时,它显然会进入 else 状态。所以我必须这样做

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

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

所以我的问题是这样的:

有没有可能用这种类型的参数更快地和/或没有额外的功能来做这种类型的条件?

【问题讨论】:

  • if (boolify($param)) 如果 $param 未定义,则应抛出“未定义”错误。还是只是想看看它不是空的?
  • 那么 3 种可能性对吧?空,真,假
  • @TheOneandOnlyChemistryBlob 我完全搞砸了整个问题(现在已编辑),boolify 在这种情况下不会是正确的功能,这是导致我们项目中出现巨大错误的确切错误。
  • @MagnusEriksson 我编辑了我的 Q,在那里犯了很大的错误,对此感到抱歉。
  • nullfalsetrue 是变量的不同状态,但if 语句中的null 变量将被评估为false

标签: php boolean conditional-statements isset


【解决方案1】:

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

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

如果是null,则会忽略它。

【讨论】:

  • 这是我需要的确切代码!虽然,为了确保,是否有另一种方法可以在不使用“if ($param === false)”的情况下实现完全相同的输出?对于具有相同输入的每个条件,键入的行有点长。
  • 不,不是。这条线怎么可能太长了?
  • 您可以随时将$param 更改为$p,如果这样更容易?顺便说一句,如果它解决了您的问题,请将答案标记为已解决。
  • 我知道它看起来很奇怪,但我喜欢尽可能地减少我的代码,我什至有一个返回一行的函数,它检查数组键是否存在并返回键的值以避免如果(array_key_exists(...)) {set value of key},它看起来像这样:return (isset($haystack[$needle])) ? $haystack[$needle] : ($null) ? (array_key_exists($needle, $haystack) ? $haystack[$needle] : null): null; 所以这种类型的东西像 else if (...) 而不是 else 对我很重要,即使它们可能不应该...... .
  • 您所做的对可能需要编辑您的代码的其他编码人员来说意味着什么。使用嵌套的三元运算实际上应该让你被解雇。这是一团糟中的一团糟,是一种非常糟糕的做法。好的代码是不言自明的,而不是晦涩的。你得到了一个有效的答案。如果您想尝试使其更加模糊,请继续,但现在,您的问题已得到解答。
【解决方案2】:

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

以下功能解决了您的难题。如果$param 为真或假,则return 会返回$param 的布尔版本(对于$param 是字符串或整数等情况很有用)。

否则,定义为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
字符串 :: true
45 :: 真的

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

解决方案:

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

可能的结果:

1(真)
0(假)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    相关资源
    最近更新 更多