2012-03-02 77 views
28

我已經看到了很多:$fp = fopen($filepath, "w") or die(); 但我似乎無法找到任何有關此「或」語法的真實文檔。它足夠明顯,但我可以在任何地方使用它?並且必須緊跟die()?有沒有什麼注意事項使用or時,你可以使用類似PHP「或」Syntax

if (file_exists($filepath)) 
    $fp = fopen($filepath,"r"); 
else 
    myErrMessage(); 

我知道這似乎是一個愚蠢的問題,但我找不到這方面的任何硬性規定。謝謝。

+1

'或'可以用來組合*表達式*,而不是*語句*。由於它的運算符優先級較低(與賦值相比),它有時很有用。順便說一下,你的if塊缺少花括號。在你掌握之前不要查找語法快捷鍵。 – mario 2012-03-02 14:57:01

+1

條件句後面跟一條語句不需要大括號。 – Andrew 2013-02-14 23:09:54

+2

是是的;語言語法允許。儘管如此,它看起來很業餘,而且通常都會皺眉。 – mario 2013-02-17 23:02:19

回答

14

這是一個邏輯運算符,可用於任何邏輯表達式。

http://php.net/manual/en/language.operators.logical.php

+5

您還應該將優先級看作'$ fp = fopen($ filepath,「w」)或die();'與$ fp = fopen($ filepath,「w」)不同。 (';';' – 2012-03-02 15:23:39

+1

)向上面添加更多信息:第一條語句(使用'or')查看第一個表達式$ fp = fopen($ filepath,「w」)'返回false(或任何PHP認爲等於假,如'null'或'0')。如果,並且只有在它執行時,纔會執行第二個語句'die()'。第二個是做同樣的事情,但通常只應用於'if'上下文中。 – Thomas 2013-08-14 18:42:13

3

基本上它的意思是「如果第一個命令失敗,則執行第二個命令。」在你的例子中,如果PHP無法打開文件,它將終止腳本(die())。

+0

從技術上講,它測試第一個表達式是否返回布爾值false,然後用快捷方式布爾表達式執行第二個表達式。如果第一個表達式返回一個非錯誤值,則快捷布爾表達式意味着不需要執行第二個表達式 – 2012-03-02 14:59:14

5

or只是做了一個boolean比較。

fopen()返回的結果可以視爲這樣一個布爾值,因爲如果失敗(如果不是,則返回FALSE)。

如果失敗,語句將在右側進行求值,因此函數die()被調用。

0

它可以用作||但是具有不相同的優先級: http://www.php.net/manual/en/language.operators.precedence.php

操作符的優先級指定如何「緊密」其結合2個 表達式在一起。例如,在表達式1 + 5 * 3中, 的答案是16而不是18,因爲乘法(「*」)運算符具有比加法(「+」)運算符更高的優先級 。必要時,可以使用圓括號 強制優先。例如:(1 + 5)* 3 值爲18

3

'或' 在PHP是像類似C的語法(||)

<?php 
if(($a==1 || $a==2) && ($b==3 || $b==4) && ($c==5 || $c==6)) { 
    //do that something here. 
} 
?> 

的 '或' 你在說大約僅僅是一個特技爲以下狀態:

實施例:

$result = mysql_query('SELECT foo FROM bar', $db) or die('Query failed: ' . mysql_error($db)); 

的或死亡()特技是有幾個原因非常差的選擇:

  1. 這不是一個非常好的方式來向用戶顯示錯誤消息。
  2. 您無法以任何方式捕捉錯誤。
  3. 您無法記錄錯誤。
  4. 您無法控制它是否應該輸出到屏幕上。在開發環境中這樣做可以,但肯定不是在生產環境中。

    5.它阻止你做任何類型的清理。它只是突然結束腳本。

參考文獻:[此處輸入鏈接的描述] [1]

[1]:http://www.phpfreaks.com/blog/or-die-must-dieenter code here

5

這是巧妙的方法,從一些PHP承襲前作的基礎上,事實上,PHP相當巧妙不會評價以下或任何表情,如果第一個返回真:

function a($ret){ 
    echo "FOO"; 
    return $ret; 
} 
function b($ret){ 
    echo "BAR"; 
    return $ret; 
} 

$result = (a(true) OR b(true)); 

將只打印出FOO,意味着b()甚至沒有執行。

8

讓我們只說:

$result = first() || second(); 

將評估爲:

if (first()) { 
    $result = true; 
} elseif (second()) { 
    $result = true; 
} else { 
    $result = false; 
} 

同時:

$result = first() or second(); 

將評估爲:

if ($result = first()) { 
    // nothing 
} else { 
    second(); 
} 

換句話說,你可以考慮:

$result = first() || second(); 

$result = (first() || second()); 

和:

$result = first() or second(); 

是:

($result = first()) || second(); 

它僅僅是重要的優先。