在PHP中,如果URL中包含「var = true」之類的URL時,URL中的「true」和「false」會被轉換爲布爾變量,還是它們等於文字「真」還是「假」?例如,在URL中有「var = false」的情況下:獲取變量中的'true'
if ($_GET['var'] == false) { ... }
工作嗎?或者,由於變量中有文本,變量總是成立的?
在PHP中,如果URL中包含「var = true」之類的URL時,URL中的「true」和「false」會被轉換爲布爾變量,還是它們等於文字「真」還是「假」?例如,在URL中有「var = false」的情況下:獲取變量中的'true'
if ($_GET['var'] == false) { ... }
工作嗎?或者,由於變量中有文本,變量總是成立的?
它們作爲字符串進行傳遞,所以總是truthy,除非它們是其中之一,其計算結果爲假,而不是:
''
'0'
爲了讓我的生活更輕鬆,我只是將布爾GET變量作爲1
或0
並驗證它們是其中一個值,或者適當地選擇默認值:
// Default value of false
$var = false;
if (isset($_GET['var']))
{
if ($_GET['var'] === '1' || $_GET['var'] === '0')
{
$var = (bool) $_GET['var'];
}
}
不,$_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));
你爲什麼不考呢? – Ponkadoodle 2010-08-02 04:17:09