摘要:事實上,計算機為了節省資源,采取了短路運算的方式解釋這個邏輯表達式。短路運算的精髓就是邏輯與檢查運算符第一個表達式是否為,如果直接返回,后續的表達式直接忽略。
先看一段代碼
$a = 5; $b = 20; if ($a = 10 || $b = 7) { $a++; $b++; } echo $a," ","",$b; //1 21
剛開始接觸可能一眼看過去很容易說出最后的輸出是5 20 但是仔細看后()里的條件表達式是賦值操作,所以應該輸出11 21.但是計算機和我們開了一個并不好笑的玩笑。她妹的,最后竟然輸出的是1 21。
計算機的思路和人腦的思路是有區別的,在編程的時候必須了解計算機的思維模式:機械式的思維模式。我們人在判斷這個邏輯表達式的時候會跳躍性的先對$a和$b賦值,然后再做與運算,這樣做雖然不影響邏輯運算的結果,但是也會產生上面這種副作用。事實上,計算機為了節省資源,采取了短路運算的方式解釋這個邏輯表達式。當他發現與運算符的前一個數值(例如$a)是false時,他就會判斷這個與運算表達式的運算結果是false,然后跳出這個邏輯運算表達式,繼續執行下面的程序,而不會執行表達式剩下的語句。
至于這里為什么$a的值是1? 是因為在條件表達式的時候$a = 10的操作的時候php會把$a轉換成boolean。上面的例子中$a = 10即轉換成了true.所以在{}中的$a++ 是不能進行加法運算的。但是如果花括號中的$a++換成$a = $a + 1 那么此時就可以進行數值運算了。
補充短路運算的精髓就是
邏輯與(&&)->檢查運算符第一個表達式是否為false,如果false直接返回false,后續的表達式直接忽略。
邏輯或(||)->檢查運算符第一個表達式是否為true,如果是true直接返回true,后續表達式直接忽略。
PS:&&的優先級高于and、||的優先級高于or、等號(=)的優先級高于and和or
php //以上例程的輸出類似于: bool(true) bool(false) bool(false) bool(true)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20985.html
摘要:后端知識點總結服務器服務器的作用接收客戶端的請求,查找需要的數據文件數據庫其它系統,發送回客戶端。注意默認情況下,若判定了某個相等條件則執行該條件以及后續所有條件中的執行語句必須配合關鍵字使用。 后端知識點總結——PHP 1.Web服務器 Web服務器的作用:接收客戶端(PC/PAD/PHONE)的請求,查找需要的數據(文件/數據庫/其它系統),發送回客戶端。 Web服務器分為兩種:...
摘要:后端知識點總結服務器服務器的作用接收客戶端的請求,查找需要的數據文件數據庫其它系統,發送回客戶端。注意默認情況下,若判定了某個相等條件則執行該條件以及后續所有條件中的執行語句必須配合關鍵字使用。 后端知識點總結——PHP 1.Web服務器 Web服務器的作用:接收客戶端(PC/PAD/PHONE)的請求,查找需要的數據(文件/數據庫/其它系統),發送回客戶端。 Web服務器分為兩種:...
摘要:與變量不同,常量不存在可變常量,如果常量名是動態的,也可以用函數來獲取常量的值。執行運算符命令反引號。遞增遞減運算符不影響布爾值。遞增遞減其他字符變量則無效,原字符串沒有變化。不允許用來檢測常量。 變量 基本 引用賦值 global 關鍵字 以下結果在命令行中有效,網頁php中請不要嘗試。。。都是坑。Example #1 使用 global或$GLOBALS 以下為網頁ph...
在邏輯運算中,轉換為boolean類型的值后為false的情況: 0、、null、false、undefined、NaN,其他都為true。 短路運算是利用邏輯運算中的 && 和 || 操作符,對應的有兩種不同的短路運算類型 || 短路運算 僅當前者不成立時才去執行后者 原理:||先計算第一個運算數,如果可以被轉換成true,則返回左邊這個表達式的值,否則計算第二個運算數。即使||運算符的運算數...
閱讀 1829·2023-04-26 00:59
閱讀 3130·2021-11-15 18:10
閱讀 3072·2021-09-22 16:02
閱讀 766·2021-09-02 15:15
閱讀 3716·2019-08-30 15:56
閱讀 1917·2019-08-30 15:54
閱讀 2858·2019-08-29 16:31
閱讀 2035·2019-08-29 16:10