给PHP开发者的编程指南 第一部分降低复杂程度(3)

阅读代码时可以清楚的知道这个判断依赖 $a, $b 和 $c 三个变量,而函数名也可以很好的表达判断条件的内容。
使用布尔表达式
if 表达式的内容可以转换成布尔表达式。不过 PHP 也没有强制你必须提供 boolean 值:

$a=new\DateTime(); ... if($a) { ... }

$a 会自动转换成 boolean 类型。强制类型转换是 bug 的主要来源之一,不过还有一个问题是会对代码的理解带来复杂性,因为这里的类型转换是隐式的。PHP 的隐式转换的替代方案是显式的进行类型转换,例如:

if($a instanceof DateTime) { ... }

如果你知道比较的是 bool 类型,就可以简化成这样:

if($b=== false) { ... }

使用 ! 操作符则还可以简化:

if(!$b) { ... }

不要 Yoda 风格的表达式
Yoda 风格的表达式就像这样:

if('hello'===$result) { ... }

这种表达式主要是为了避免下面的错误:

if($result='hello') { ... }

这里 'hello' 会赋值给 $result,然后成为整个表达式的值。'hello' 会自动转换成 bool 类型,这里会转换成 true。于是 if 分支里的代码在这里会总是被执行。
使用 Yoda 风格的表达式可以帮你避免这类问题:

if('hello'=$result) { ... }

我觉得实际情况下不太会有人出现这种错误,除非他还在学习 PHP 的基本语法。而且,Yoda 风格的代码也有不小的代价:可读性。这样的表达式不太易读,也不太容易懂,因为这不符合自然语言的习惯。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0177073cee8631b0a63e316511f8e0c6.html