Rom*_*man 3 php comparison if-statement
我很确定这之间没有区别
if ($value === true)
Run Code Online (Sandbox Code Playgroud)
还有这个
if (true === $value)
Run Code Online (Sandbox Code Playgroud)
对我来说,它总是令人困惑.我曾经认为这是一种"非常规的新开发者风格".此外,我的老板告诉我永远不要做这样的事情.
但今天我正在浏览Slim的源代码,由创建PHP的人编写:正确的方法,并看到了这一点 (第341行).
if (true === $value) {
$c['settings'] = array_merge_recursive($c['settings'], $name);
}
Run Code Online (Sandbox Code Playgroud)
我敢肯定像Josh Lockhart这样的人如果被认为是一种不好的做法就不会做这样的事情.这个订单怎么样?这是一种古老的传统吗?
这通俗地称为"尤达条件".他们使用背后的原因是因为有时人们会犯错误.在if声明的背景下,有时会出现这样一个错误:
if($value = 42)
Run Code Online (Sandbox Code Playgroud)
请注意,没有双等号(==).这是一个有效的语句,不是语法错误.它可能会导致跟随它的代码造成巨大的中断,并且很难快速识别.尤达条件通过反转条件表达式来解决这个问题:
if(42 = $value)
Run Code Online (Sandbox Code Playgroud)
这不是一个有效的语句,并且是语法错误,并且通常报告包含行号,因此它们很容易找到.
"你有语法错误.第73行你必须做其他事情." - 可能是Yoda的编译器
你是否真的认为他们的好或坏取决于个人偏好和风格.在流行框架(如Wordpress)的某些情况下,Yoda条件实际上是官方编码标准的一部分.对他们的主要批评是,对某些人而言,他们降低了代码的可读性,而没有提供任何真正的主要好处.
正如@MonkeyZeus在对该问题的评论中所指出的那样,有时候人们确实意味着只在if条件中使用单个等号:
if($iMustHaveAValue = functionCallThatCanFail()) {
// Rest assured, $iMustHaveAValue has a truthy value.
}
Run Code Online (Sandbox Code Playgroud)
由于赋值操作的值是赋值的值,因此if在这种情况下由条件计算的值(以及在原始情况下是非预期的)是恰好分配的值.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |