php - PHP - 条件 AKA Yoda 表示法中的值顺序
问题描述
原始问题
我前段时间在一篇文章中读到,我发现在进行比较时,由于某种原因,订单很重要。
我找不到任何关于 PHP 中比较顺序的信息。
它显然不会产生巨大的变化,但我很想知道这是否有任何优点。
在我正在进行的整个项目中,比较是按$x === true
.
以相反的顺序进行比较有什么区别true === $x
吗?
结论
显然我在原始问题中提到的是一种称为“尤达条件”的编程风格。
这个wiki 页面很好地解释了这种风格。
这个答案让我理解了这个概念,只是注意那里有一个小错误。
这是我的看法:
使用这种风格的主要原因是避免=
在您打算与 比较时意外分配 with ==
。
如果你想检查一个变量是否与你比较的值大致相同,请使用:
if(false == $var) // evaluates to true if $var is equal to false
超过
if($var == false) // evaluates to true if false is equal to $var
阻止
if($var = false) // assigns false to $var and evaluates to false
尽管
if(false = $var) // is a syntax error
如果要检查变量是否严格具有与您比较的值相同的值,请使用:
if(false === $var) // evaluates to true if $var is identical to false
超过
if($var === false) // evaluates to true if false is identical to $var
在使用 Yoda 风格的情况下,这并不重要,因为这不是严格比较的问题,因为它很难混淆
=
,===
但如果你使用它,==
那么也使用它===
来保持一致。
总而言之,我认为 Yoda 表示法的优点在于它强调了条件下的比较和赋值之间的区别。
解决方案
这些被称为“尤达比较”。因为这并不重要,但请考虑一下===
:==
if($a = 0)
在这种情况下$a
被设置为零,不进行比较。此外,您认为您正在进行的比较根本不会评估,但比较操作将继续进行,就好像进行了比较一样。翻转它总是会失败:false
if(0 = $a)
现在会抛出一个错误。
推荐阅读
- github - 在 GitHub 中合并后可以将分支恢复到 PR 阶段吗?或者我可以撤消合并吗?
- apache - 将所有流量重新路由到另一台服务器
- html - 如何在 html 中将图像链接居中?
- java - Java 8 意外处理文件名中的 unicode 字符
- azure - 无法使用 Cobertura 从 Azure DevOps 获取代码覆盖率结果
- python - 如何使用 KafkaConsumer 实现 poll()?
- r - 我如何找到特定性别的平均得分?
- protocol-buffers - protobuf 字段排序如何影响在线大小?
- node.js - 如何在 mongoose-paginate-v2 中使用 nextPage 和 prevPage
- python - 从 pydantic 模型中的父静态方法访问子类属性