【问题标题】:How should boolean expressions be written in PHP?布尔表达式应该如何用 PHP 编写?
【发布时间】:2010-08-18 16:02:05
【问题描述】:

下面的布尔表达式应该如何用PHP编写:

$foo = "";
if($var==TRUE){
    $foo = "bar";
}

if($var==TRUE){
    $foo = "bar";
}else{
    $foo = "";
}

$foo = ($var==TRUE) ? "bar": "";

【问题讨论】:

  • 感谢乔治,我在 16.55 下班前发布了它,事后看来,我本可以让标题和开头的句子更清晰。 :)

标签: php boolean boolean-logic


【解决方案1】:

首先,true 不是常量,它是一个标记,所以请不要大写(我知道有些标准会这样做,但我认为它会混淆含义)...

其次,您不需要在if 中进行多余的$var == true 比较。它与if ($var) { 完全相同(对于双重== 比较。相同的比较=== 需要明确)。

第三,我更喜欢预初始化。所以:

$foo = '';
if ($var) {
    $foo = 'one status';
} else {
    $foo = 'another status';
}

如果您不需要 else 分支,只需将其删除。我更喜欢预初始化,因为它会强制您初始化变量,并且可以防止您忘记在其中一个分支中初始化它的情况。另外,当您稍后返回阅读该函数时,它会为您提供类型提示...

对于这样一个简单的分支,使用三元语法就可以了。如果有更复杂的逻辑,我会远离:

$foo = $var ? 'bar' : '';

【讨论】:

  • 说实话,上面的代码与我目前正在做的事情没有任何关系,并且是我在几秒钟内敲出的东西,以便更清楚地提出问题,布尔值似乎比字符串或整数比较。预初始化是我一直在做的事情,但我从来没有被“教”过 PHP 或任何语言,只是想知道是否有最佳实践。感谢 ircmaxell 的建议。
【解决方案2】:

所有这些都有效。这是偏好。我会考虑像在第一个示例中那样首先初始化变量。但是对于这么简单的事情,第三个选项在我的书中很好。

另外,如果 $var 只是一个布尔值,第三个不必那么冗长:

$foo = $var ? "bar" : "";

【讨论】:

  • 除非他们专门寻找真,否则你会想要使用 $foo = ($var === TRUE) ? “酒吧”:“”;
【解决方案3】:

我喜欢第一个:

$foo = "";
if($var==TRUE){
    $foo = "bar";
}

因为它清晰、简洁、易于阅读。

【讨论】:

    【解决方案4】:

    我更喜欢第一个(布尔值的冗余测试除外),因为它可以在各种语言中始终如一地工作,尤其是那些需要在设置变量之前声明变量(并可能对其进行类型化)的语言。
    爪哇:

    String foo = "";
    if (var) {
      foo = "Something";
    }
    

    JavaScript 或 JavaFX:

    var foo = "";
    if (var) {
      foo = "Something";
    }
    


    也可以使用第 3 种形式,但如果条件(或赋值)复杂,则可读性较差。

    【讨论】:

      【解决方案5】:

      没关系。当有很多 elseif 时,我喜欢第一个,这样你就知道变量总是被初始化的。但这实际上只是一个偏好问题。

      和引号一样,我喜欢在 php 中使用单引号。没有充分的理由:)

      【讨论】:

      • 哦,第三个也可以很容易地成为 $foo = $var ? '酒吧' : '';
      • 我倾向于使用混合引号,具体取决于我当时输出的内容,HTML 字符串倾向于使用单引号生成,而我相信双引号是生成新字符串的唯一方法换行? - "\r\n"
      【解决方案6】:

      通常情况下,正确答案是“视情况而定”。在这种情况下,

      if ($var==TRUE) $foo = "bar";
      else $foo = "";
      

      很清楚。但是你的背景是什么?

      一般来说,第三个运算符,即您的第三个选项,应该非常谨慎地使用,因为它很容易变得难以阅读。

      但是要考虑您希望代码的含义,而不是它的作用。您想将您的 $foo 设置为“正常”值然后覆盖它吗?或者你想设置一些取决于 $var 是什么的东西?

      我觉得可以改变的东西,不是你直接问的,而是类似的,是这个,来自

      function func() {
          ...
          if ($condition) {
              do plenty
              of things
          }
          else {
              do plenty
              of things
          }
      }
      

      那个,我一般喜欢改成:

      function func() {
          ...
          if ($condition) {
              do plenty
              of things
              return;
          }
          do plenty
          of things
      }
      

      一般来说有道理

      问问自己:“如果对我的代码一无所知的人读了它,对他或她有意义吗?”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-21
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 2019-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多