我正在读一本书,作者正在使用以下功能。我不了解平等运营商的好处。任何人都可以解释使用平等运算符的原因。
public function isDiscounted()
{
return 0 == $this->getRow()->discountPercent ? false : true;
}
去
会不会更容易public function isDiscounted()
{
return $this->getRow()->discountPercent ? false : true;
}
?
祝你好运, 赫伯特
答案 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的值大于零,则会打折。简单,精确,清晰。它还负责处理负值。