我正在經歷php.net的運算符優先級部分和整個this example它說:運算符優先級和短路
$a = 1;
$b = null;
$c = isset($a) && isset($b);
$d = (isset($a) and isset($b));
$e = isset($a) and isset($b);
var_dump($a, $b, $c, $d, $e);
//Result:
int(1)
NULL
bool(false)
bool(false) <== I get this
bool(true) <== I do not get this
我用了相當多的調試,來到在我的代碼中詳細打印(_r)語句以跟蹤我在代碼中的位置。所以我使用$debug and print_r($dataArray)
或$verbose and print "Updating dataArray\n"
作爲代碼之間的單獨聲明,從而允許我控制這些print(_r)語句。這來自我的BASH經驗,我曾經寫過很多[[ $condition ]] && { #Do if true } || { #Do if false }
。在BASH,我知道他們是短路的,並用這個事實來寫很多簡單的襯裏。
現在我正在觀察,很多這種做法(編寫$verbose and print
)正在慢慢蔓延到我的if
聲明中。我知道這是不是一個建議的做法,可以咬我回。然而,我很想掌握這個技巧,因爲我喜歡寫這樣的襯衫,並且想用它作爲我的個人風格。
所以我的問題(s)爲(是):
- 哪個運營商(
&&
或and
)是短路? - 該手冊說
&&
優先於and
,但有人可以通過將短路操作員功能/功能/特性與操作員優先級混合來舉例說明。 (基本上是優先和短路的混合匹配)
請仔細闡述運營商的短路以及返回性質。
PS:1.我希望這些操作符的關聯性相同且直觀,但如果您知道任何怪癖,請賜教。
PS:2.如果您仍然想警告我,避免這種做法的危險,請舉例說明。
編輯:用||
更換or
改變我的簡單$var = mysql_(...) or die()
代碼後,我發現是多麼討厭使用||
和&&
運營商,而不是and
和or
。 該代碼根本不起作用!就我的理解,前一個構造將TRUE
或FALSE
的返回值分配給$var
,這反過來使$var
的所有順序使用都生成警告/錯誤/意外行爲。後者構建體首先將mysql_(...)
的結果分配給$var
,然後評估=
和die
的化合物。
對我來說這是一個很好的教訓,我更好1.開始使用PDO/mysqli並自己處理錯誤2.在寫上面我稱之爲個人風格之前請三思。
//提醒自己:不要用一個腳本/解釋語言,而寫在另一個代碼,每一個都是獨特的,都有自己的怪癖和陷阱,以及那只是傷心*嘆*
可能重複[參考 - 這個符號在PHP中意味着什麼?](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – Gordon
@Gordon :感謝您的參考_。我檢查了列表,儘管幾個問題似乎回答了部分問題(如我已經知道的優先級)。恕我直言,運營商的短路性質以及它們的優先權沒有詳細討論。 – Sudhi
對示例鏈接評論的作者提到了運算符優先級,它指示AND關鍵字在equals之後被評估。它看起來很奇怪,但它讓我想起了一些腳本使用的一些'mysql_connect(...)或die()'行。 –