写这篇的主因是上週追一个 typo error, 但是这是正确标準语法, 不会產生 syntax error, 所以不好追, 再此做个记录, 之后可以先 grep 看看是不是这种 typo error 造成的. XD
PHP if 判断式可能犯的拼写错误
if 判断式 写法, 有一个很常见的, 但是那不是 typo error, 也很常这样子写的, 是 “=”、”==”、”===”.
范例
View Raw Code?
<?php
if ($a = ‘a’)
echo ‘这行会印出来, 因為 $a = “a”, 而 a 不是 0 / false, 所以会恆為 true’;
if ($a == ‘b’)
echo ‘这行不会被印出来, 因為 $a 等於 “a”, 不等於 “b”‘;
if ($a === true)
echo ‘这行不会被印出来, 因為 $a 型态不是 true. (当然主要是值不对, 但是在此先不讨论)’;
?>
当程式裡面, 不小心把 等号删掉一个, 就会引发很大的悲剧. (syntax 检查不出来, 是正确写法)
上述那个是常见的, 也很难追的, 但是下述的是写第一次遇见的~ (把 “!=” 打成 “=!”, 这个应该 9成9 是 typo error.)
View Raw Code?
<?php
$a = ‘b’;
if ($a != ‘a’)
echo $a; // 这行会印出 ‘b’, 这是本来要做的事情.
// 当 != 打成 =! 的话, 就会造成悲剧.
if ($a =! ‘a’)
echo ‘这行不会被印出来’;
var_dump($a); // 印出 false
?>
问题追踪拆解
一步一步分解 $a =! ‘a’
$a = !’a’ // ‘a’ 的 boolean 是 true, !true = false.
$a = false
所以 if ($a = false), 就永远不会落入此行, syntax 也是合法的.
註: 以后 Debug 除了 “=”、”==”、”===” 外, 要多注意看看 “!=” 和 “=!” 的写法.