2010-08-02 55 views
13

在PHP中,如果URL中包含「var = true」之類的URL時,URL中的「true」和「false」會被轉換爲布爾變量,還是它們等於文字「真」還是「假」?例如,在URL中有「var = false」的情況下:獲取變量中的'true'

if ($_GET['var'] == false) { ... } 

工作嗎?或者,由於變量中有文本,變量總是成立的?

+0

你爲什麼不考呢? – Ponkadoodle 2010-08-02 04:17:09

回答

14

它們作爲字符串進行傳遞,所以總是truthy,除非它們是其中之一,其計算結果爲假,而不是:

  • 空字符串''
  • 的字符串包含數字零'0'

爲了讓我的生活更輕鬆,我只是將布爾GET變量作爲10並驗證它們是其中一個值,或者適當地選擇默認值:

// Default value of false 
$var = false; 

if (isset($_GET['var'])) 
{ 
    if ($_GET['var'] === '1' || $_GET['var'] === '0') 
    { 
     $var = (bool) $_GET['var']; 
    } 
} 
+1

哇PHP有類型轉換,這意味着它以另一種方式像C++?甜! – Nilbert 2010-08-02 04:22:19

+1

@Nilbert:[是的。](http://php.net/manual/en/language.types.type-juggling.php#language.types.typecasting) – BoltClock 2010-08-02 04:23:13

+2

@Nilbert歡迎來到PHP的基礎知識。 :)類型一直隱式地在PHP中傳輸。 – deceze 2010-08-02 04:23:41

17

不,$_GET將始終只包含字符串。

但是,你可以filter它得到一個布爾值。

FILTER_VALIDATE_BOOLEAN
返回TRUE"1""true""on""yes"。否則返回FALSE。 如果FILTER_NULL_ON_FAILURE設置,FALSE只爲"0""false""off""no"""返回,返回所有非布爾值NULL

例子:

$value = filter_input(INPUT_GET, "varname", FILTER_VALIDATE_BOOLEAN, 
    array("flags" => FILTER_NULL_ON_FAILURE)); 
+1

+1不知道有布爾值過濾器。 – BoltClock 2010-08-02 04:24:59

+1

指向http://php.net/filter的鏈接將是適當的。 – deceze 2010-08-02 04:25:16

+0

有點mon but,但很方便,+1。 – zerkms 2010-08-02 04:32:09