7

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

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

或者

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

或者

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

6 回答 6

8

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

其次,您不需要$var == trueif. 它与if ($var) {(对于双重==比较。相同的比较===需要明确)完全相同。

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

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

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

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

$foo = $var ? 'bar' : '';
于 2010-08-18T16:05:36.123 回答
5

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

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

$foo = $var ? "bar" : "";
于 2010-08-18T16:03:43.773 回答
1

我喜欢第一个:

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

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

于 2010-08-18T16:04:09.467 回答
1

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

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

JavaScript 或 JavaFX:

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

等等
。也可以使用第三种形式,但如果条件(或赋值)很复杂,它的可读性就会降低。

于 2010-08-18T16:27:26.720 回答
0

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

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

于 2010-08-18T16:04:21.760 回答
0

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

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
}

这通常是有道理的

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

于 2010-08-18T16:12:33.563 回答