比较运算符返回0 ==

时间:2015-05-07 19:34:44

标签: php

我正在读一本书,作者正在使用以下功能。我不了解平等运营商的好处。任何人都可以解释使用平等运算符的原因。

public function isDiscounted()
{
return 0 == $this->getRow()->discountPercent ? false : true;
}

会不会更容易
public function isDiscounted()
{
return $this->getRow()->discountPercent ? false : true;
}

祝你好运, 赫伯特

4 个答案:

答案 0 :(得分:4)

在您的示例中,您需要交换true和false:

bestGame

但是你可以将整数返回转换为布尔值:

return $this->getRow()->discountPercent ? true : false;

甚至:

return (bool)$this->getRow()->discountPercent;

三元无需返回真假。

答案 1 :(得分:2)

if (0 == $this->getRow()->discountPercent) { return false; } else { return true; } 运算符的好处是使程序的意图更清晰,即将数字变量与零进行比较。这相当于写作:

return $this->getRow()->discountPercent ? true : false;

你也可以把它写成:

discountPercent

但这表明return !$this->getRow()->discountPercent; 是一个布尔值,而不是数字。同样,你可以写:

{{1}}

但这也表明它是布尔值。虽然PHP对这类类型很灵活,但将所有非虚假值视为真,原始代码更易于人类读者理解。

答案 2 :(得分:0)

在PHP中,您可以进行宽松的比较或严格的比较。这实际上取决于你要比较的东西,有时松散是好的,有时你需要它是严格的。

  

松散与严格

/** loose **/
0 == 0; // true
0 == false; // true
0 == ''; // true
0 == null; // true

/** strict **/
0 === 0; // true
0 === false; // false
0 === ''; // false
0 === null; // false
  

因为它与你的例子有关

/**
 * When doing the loose comparison, anything is isn't
 * 0, false, '', or null will always evaluate to true.
 *
 * So for instance:
*/

'iamateapot' == true; // true
'false' == true; // true, this is true because it's a string of false not a boolean of false;
 0 == true; // false;

在您的特定情况下,您正在进行

$this->getRow()->discountPercent ? false : true;

这是一个松散的比较,我的偏好是总是指定你要比较的东西,所以你的第一个例子将是我个人选择的。

答案 3 :(得分:0)

不,这不容易

return $this->getRow()->discountPercent ? false : true

事实上,这是错误的。如果discountPercent为零,则应返回false。在您建议的代码中,如果discountPercent为零,它将评估为false,因为它被用作条件并返回true。

如果你真的想保持相同的逻辑,但要缩短它,最好的方法是:

return $this->getRow()->discountPercent != 0

我总是遵循一条规则:如果条件语句的结果是布尔值,则返回/条件本身。另外,我不同意写作:

return 0 == $this->getRow()->discountPercent ? false : true;

使代码更具可读性。如果我们按照函数应该做的那样,我会写这样的东西:

return $this->getRow()->discountPercent > 0

这清楚地表明,如果discountPercent的值大于零,则会打折。简单,精确,清晰。它还负责处理负值。