我們經常在程序流程中進行邏輯判斷,與或非,用的是爐火純青,相信你也不少用。那麼在PHP中,有兩個操作符非常接近,就是 | 和 ||,那麼他們有什麼區别呢?
本文就從幾個小栗子,說一說邏輯運算符,和位運算符那些恩愛糾纏。
學習時間正好比PHP内的 & 和 && 的關系一樣,雙符号表示“短路”操作。什麼意思呢,就好比下面這個條件判斷:
if(condition1 || condition2 || condition3)
如果 condition1 = true,那麼後面的兩個condition根本不會進行檢查。效率是不是頓時高了起來?
假如寫成 | ,像下面這樣的判斷邏輯
if(condition1 | condition2 | condition3)
這個判斷會把 condition1,2,3 挨個執行一遍,不管 condition1到底是不是true。是不是有點浪費資源了!
所以說,不使用“短路”操作符,程序上下文是有一定風險的。比如下面的例子,檢查某個對象是否為空,且檢查其某個屬性值滿足某個條件:
if($class != null && $class->someVar < 20)
上面的寫法,如果 $class 本身就是 null,那麼直接熔斷;隻有 $class 不為空,才會執行接下來的屬性檢查條件。
如果是一個 & 号,會出現什麼情況呢?
所以說,沒有短路機制,這個判斷條件跑偏了。
深入學習其實對于 | 或 &,在PHP中是作為位操作符使用。下圖是PHP位操作符的意義:
位操作應用于二進制數據操作,比如:
A = 01010101
B = 10101010
A | B = 11111111
當然也可以是任何類型的數據,因為底層還是字節碼的按位操作。
寫在最後本文通過操作符 | 和 || 的區别與使用,使大家能夠明白,位操作符與邏輯運算符的本質區别。以及邏輯運算符所具有的“短路”機制。
位操作在數據運算中很高效,但是不直觀。使用的時候要充分測試。
Happy coding :-)
我是 @程序員小助手 ,持續分享編程知識,歡迎關注。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!