【问题标题】:What's the difference between 'false === $var' and '$var === false'?'false === $var' 和 '$var === false' 有什么区别?
【发布时间】:2012-11-04 19:32:44
【问题描述】:

一个比另一个更易读吗?起初,我不喜欢false === 方法,但随着我越来越频繁地看到它,我正在热身。我很确定他们会返回相同的结果。

【问题讨论】:

  • 我想这就像说如果x = y 那么y = x
  • 第二个更容易被误写为作业而不会导致错误。
  • 好老Yoda
  • 我知道我错了,它们并不总是返回相同的结果,这打破了 x = yy = x 的类比。

标签: php coding-style boolean-logic boolean-expression


【解决方案1】:

绝对没有功能上的区别。

我通常更喜欢将变量放在第一位,常量值放在第二位。因为这是有道理的(当你大声说出来时,你会说“我测试变量是否为假”?还是“我测试错误等于变量”?)

【讨论】:

  • +1,我喜欢您对“代码越响亮越好”的愿景
  • 如果您在 if 语句中使用赋值,现代 IDE 会提醒您,因此将常量放在首位的唯一用例会迅速减少。
  • 取决于你是否是星球大战的粉丝:“如果 false 是值......”
【解决方案2】:

我更喜欢

false === $var

即因为有时您只使用相等而不是寻找身份。

在这种情况下你写

false == $var

但有时你并不处于游戏的顶端,可能会写

false = $var

这会立即产生错误,让您立即修复它。

但是,如果你输入

$var = false

您最终会用头撞墙一个小时,试图弄清楚为什么您的脚本无法正常工作。

【讨论】:

  • 使用像样的 IDE 可以解决这个问题。
  • 代码应该可以独立于IDE访问
【解决方案3】:

一个比我优秀得多的软件工程师教我这个。长话短说,将常量放在首位是一种最佳做法,尽管一开始可能看起来很奇怪。我说这是一种最佳做法,因为它会产生最可预测的结果:

$var = null;

if (false === $var) {   // NullPointerException is not thrown; only evaluates to "true" if the value "false" was assigned to $var
    ...
}

if ($var === false {    // NullPointerException will be thrown
    ...
}

if (false = $var) {     // Parse Error
    ...
}

if ($var = false) {     // the value false is assigned to $var
    ...
}

【讨论】:

  • 我们在讨论 PHP,那里没有 NullPointerExceptions。
  • 但这个概念仍然适用。
猜你喜欢
  • 1970-01-01
  • 2019-09-21
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2011-06-01
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多