2012-08-01

【PHP】關於布林值 TRUE / FALSE

布林值是程式用來判斷 是/否 結果的變數型態, 其值為 TRUE, FALSE (不分大小寫).

在其他程式語言裡, 有另外的值可用來判斷 是/否, 如 1 代表 TRUE, 0 代表 FALSE.

PHP 也支援/接受其他型別的變數用來在程式中判斷, 以下的變數值就等於 FALSE:
  • 整數型數的 0 (零)
  • 浮點數的 0.0
  • 空字串, 及字串 "0"
  • 空陣列
  • 不含成員變數的物件 (僅指 PHP 4)
  •  NULL 值 (包括未給值的變數)
  • SimpleXML objects created from empty tags
上述提到的變數值則為 TRUE.
但這有時候會出問題, 某些函式, 如 strpos,
是用來在 A 字串尋找是否含有 B 字串, 若 B 字串含在 A 字串內, 則傳回 B字串在 A 字串的位置, 若 B 字串不在 A 字串中, 則傳回 FALSE; 而在 PHP 中, 字串的第一字位置是 0, 則我們若按一般的寫法, 可能會得不到我們想要的結果.
例如(請別理會程式的實用性...)
 
<?php
$A = 'OpenSesame';
$B = 'Open';
if(strpos($A,$B)==FALSE)
    echo 'where are you';
else
    echo 'gotcha';
?>
 
其結果會顯示 where are you, 原因就在於 $B 在 $A 的起始位置, 而這位置的值是 0, 等於 FALSE, 但 $B 確實在 $A 之中啊.
這時就要用到強制性的判別運算 ===(三個等號) 和 !==(一個驚嘆號加二個等號)
=== 用來判別不僅值相同, 連型別也必須一樣, 反之則用 !==
所以上例要將 == 換為 ===, 如下:
 
<?php
if(strpos($A,$B)===FALSE)
    echo 'where are you';
else
    echo 'gotcha';
?>
 
這樣得到的結果就會是正確的 gotcha 了.

1 則留言:

  1. 很好,搞了很久都找到答案,終於解決了,謝謝你

    回覆刪除