【问题标题】:Cleanest way to set a default value of a variable设置变量默认值的最简洁方法
【发布时间】:2014-09-16 21:35:12
【问题描述】:

我正在使用 PHP 生成 HTML,数据显示框的主要可选部分取决于框中显示的数据类型。这导致我的主要代码行看起来像这样:

if ($sLockIconHTML == "") {

    // Leave a space where the lock icon would have been.
    $sLockIconHTML = "<div class='user-task-box-right-action-icon'></div>";
}

什么是替换字符串值的干净方法,但前提是该值是空字符串?

【问题讨论】:

  • 代码长度和代码可读性可以成反比关系。那是一行,并不意味着代码是更干净的
  • 这听起来像是一个可疑的设计.. 忽略整个“使用模板”,可能只有“一个”输出变量(谁的名字不取决于“实际内容”)互斥的显示结果。
  • 1.在每个上下文中(即通常在函数内部),您通常应该知道哪些变量已设置,哪些未设置。 2. 上面的代码如果$sLockIconHTML没有设置会触发E_NOTICE错误(意思是:乱码)。
  • 对 jason 详细代码的一百万票赞成更容易阅读和调试。
  • @lxg 这只是一个 sn-p,而不是整个代码,显然 $sLockIconHTML 已在上面定义,并且在某些时候可能会重新定义。

标签: php coding-style code-formatting


【解决方案1】:

只需在脚本开头定义变量

$sLockIconHTML = "<div class='user-task-box-right-action-icon'></div>";
// Later no condition is needed the default is already there. 
// ...and the variable will not be undefined :)

或者,如果您在函数内部工作并且想要设置默认值:

function defaultFor(arg, val) {
  return typeof arg !== 'undefined' ? arg : val;
}
function newFunction(variable) {
  var variable = defaultFor(variable, defaultValue);
}

【讨论】:

    【解决方案2】:

    必须有一个条件语句来确定一个变量是否为空,或者在你的情况下是否分配了一个值

    if ($sLockIconHTML == "") {
    
        // Leave a space where the lock icon would have been.
        $sLockIconHTML = "<div class='user-task-box-right-action-icon'></div>";
    }
    

    您的代码是正确的;你也可以试试

    if (!isset($sLockIconHTML)) {
    
        // Leave a space where the lock icon would have been.
        $sLockIconHTML = "<div class='user-task-box-right-action-icon'></div>";
    }
    

    if (empty($var)) {
        echo '$var is either 0, empty, or not set at all';
    }
    

    【讨论】:

      【解决方案3】:
      $sLockIconHTML = $sLockIconHTML ?: "<div class='user-task-box-right-action-icon'></div>";
      

      $sLockIconHTML 如果没有值就会被赋值。

      此功能在 PHP 5.3 之后可用。

      【讨论】:

        【解决方案4】:

        你可以为此编写一个函数:

        function default(&$str,$default)
        {
          if ($str == '') $str = $default;
        }
        

        那么每一行将是:

        default($sLockIconHTML,"<div class='user-task-box-right-action-icon'></div>");
        

        【讨论】:

          【解决方案5】:

          对于 PHP 5.3 或更高版本,您可以使用三元运算符:

                           /* User is not blank,    else:     vvv              */
          $sLockIconHTML = ($sLockIconHTML != "" ?: "<div class='user-task-box-right-action-icon'></div>");
          

          值得注意的是,如果$sLockIconHTML 为空,则$sLockIconHTML 之后将等于1

          【讨论】:

            【解决方案6】:

            最简单的方法:

            if ($var === "")
                $var = "data";
            

            empty():

            if (empty($var))
                $var = "data";
            

            您不能像其他人建议的那样使用isset(),因为无论哪种情况它都会返回true 并且仅当您的变量不存在时才为 false。


            一个函数:

            function setVar(&$var, $data)
            {
                if (empty($var))
                    $var = $data;
            }
            setVar($var, "data");
            

            ternary operator 可以关联到一个函数:

            $var = (empty($var)) ? "data" : "";
            $var = ($var == "") ? "data" : "";
            

            这个有点棘手:

            isset($var) || $var = "data";
            

            【讨论】:

              猜你喜欢
              • 2012-11-10
              • 2012-02-09
              • 1970-01-01
              • 2011-12-01
              • 2016-08-12
              • 1970-01-01
              • 2014-06-25
              • 2013-06-27
              • 2011-04-15
              相关资源
              最近更新 更多