2011-07-14 20 views
46

可能重複:
Regarding if statements in PHP

在PHP腳本 - 這是什麼if語句這樣的支票?

<?php if($variable){ // code to be executed } ?> 

我已經看到了它在腳本中使用了幾次,現在我真的想知道這是什麼「查找」。它不會錯過任何東西;它只是一個在if語句中的簡單變量......我無法在任何地方找到任何關於此的結果,所以很明顯,我會看起來很愚蠢。

+1

如果變量爲真/存在{}將被執行之間的代碼。 – Eddie

回答

51

將構建if ($variable)測試,看看$variable評估任何「truthy」值。它可以是布爾型TRUE,也可以是非空的非空值或非零數字。看看布爾評估名單in the PHP docs.

從PHP文件:但是

var_dump((bool) "");  // bool(false) 
var_dump((bool) 1);   // bool(true) 
var_dump((bool) -2);  // bool(true) 
var_dump((bool) "foo");  // bool(true) 
var_dump((bool) 2.3e5);  // bool(true) 
var_dump((bool) array(12)); // bool(true) 
var_dump((bool) array()); // bool(false) 
var_dump((bool) "false"); // bool(true) 

注意if ($variable)是不恰當的使用測試時,如果一個變量或數組鍵被初始化。如果它的變量或數組鍵尚不存在,這將導致E_NOTICE Undefined variable $variable

+12

除了提供知識,我+1你添加單詞「truthy」以我的詞彙。 – user

+0

檢查變量時,這是否被認爲是一種很好的做法? –

+2

@BasilMusa不,不應該用它來檢查變量是否已經初始化。如果變量尚未初始化,它會導致'E_NOTICE未定義變量$ var'。你必須使用'isset($ var)'來知道它們是否已經初始化,然後檢查它的布爾值。 –

7

如果轉換$variable到布爾值,並根據該轉換的結果的行爲。

boolean文檔以獲取更多信息。

要顯式地將值轉換爲布爾值,請使用(bool)或(boolean)強制轉換。但是,在大多數情況下,轉換是不必要的,因爲如果運算符(函數或控制結構需要布爾參數),則值將自動轉換。

0

它完全取決於您要檢查的對象的值類型。在PHP中,每個對象類型都有一個特定的值,如果檢查時返回false。這些解釋可以在這裏找到:http://php.net/manual/en/language.types.boolean.php計算結果爲假的有些值是

浮動:0.0

INT:0

布爾:假

字符串: ''

陣列:[](空)

對象:對象具有0屬性/空

NULL

它與大多數其他語言有點不同,但一旦你習慣了它,它可以非常方便。這就是爲什麼你會看到大量的報表,如

$result = mysqli_multi_query($query) or die('Could not execute query'); 

在PHP函數只需要返回結果爲假的東西,像這樣的工作值類型。 PHP中的OR運算符不會評估第二個參數如果第一個參數爲true(因爲不管第二個參數的輸出如何,or語句仍然會通過),並且這樣的行將嘗試調用查詢並將結果賦值給$ result 。如果查詢失敗並且該函數返回一個假值,則線程將被終止並顯示「無法執行查詢」。

+0

-1 *「計算結果爲假的有些值是...對象:對象有0的屬性/空」 * - 這是假的。除了空的'SimpleXMLElement's(這是一種非常荒謬的特殊情況),PHP中的所有其他對象都是真的。試試'var_dump((bool)(new stdclass));'你會得到'bool(true)'。 –

1

任何這些都被認爲是錯誤的(使得//code to be executed would不運行)

  • 布爾值FALSE
  • 整數0(零)
  • 浮子0.0(零)
  • 空字符串和字符串「0」
  • 具有零元素的數組
  • 具有零成員變量的對象(僅限PHP 4)
  • 特殊類型NULL(包括尚未設定的變量)
  • 從空標記生成的SimpleXML對象

所有其他的值應該是真實的。更多信息請點擊PHP Booleans manual

3

它檢查$variable是否評估爲true。有幾個正常值評估爲true,請參閱PHP type comparison tables

if ()可以包含任何表達,最終計算結果爲truefalse

if (true)     // very direct 
if (true == true)   // true == true evaluates to true 
if (true || true && true) // boils down to true 

$foo = true; 
if ($foo)     // direct true 
if ($foo == true)   // you get the idea... 
4

下面的列表說明了被認爲評估對false在PHP中:

  • 布爾值FALSE
  • 整數0(零)
  • 浮動0.0(零)
  • 空字符串和字符串「0」
  • 具有零元素的數組
  • 零個成員變量的對象(PHP 4只)
  • 特殊類型NULL(包括尚未設定的變量)從空標籤

所有其它值都被認爲是TRUE(包括任何資源創建

  • SimpleXML的對象)。

    來源:http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

    在你的問題中,變量是if()語句中進行評估。如果該變量未設置,則根據上面的列表將其評估爲false。如果設置,或有一個值,它的值爲true,因此執行if()分支中的代碼。

  • -1

    如果函數運行成功(true)還是一個變量存在(真)boolean if語句將繼續。否則,它將被忽略

    +0

    -1;這整個答案是無稽之談。函數成功運行並返回一個錯誤的值,或者一個變量存在並且是假的是完全可能的。 –

    1

    嘗試尋找這個老擴展「php truth table」讓你的頭所有的各種坑窪等着爆你的輪胎周圍。在開始時,儘可能使用任何比較運算符來分隔代碼。嘗試和測試being identical而不是等於。