摘要:起因是這樣的,我們都知道語法里有自增操作,即,那么下面我列出一個表達式好的,為什么等于只有一種解釋,就是自增的優先級高于加減,所以二號位自增導致了一號位也變成。但是,它們的值都是。
這可能算不上是一次正規的解說,畢竟有點燒腦。
起因是這樣的,我們都知道php語法里有自增操作,即 ++,那么下面我列出一個表達式
$a = 1; $result = $a + $a++; // $result === 3
好的,為什么等于3?只有一種解釋,就是自增的優先級高于加減,所以二號位自增導致了一號位也變成2。(3 = 2 + 1)
既然一號位變成了2,為何二號位不會變成2呢?因為后置自增的返回值僅是臨時變量,這點和 C/C++是一致的,畢竟PHP也是基于C實現的。
換個寫法
$a = 1; $result = $a + ++$a; // $result === 4
似乎驗證了剛才的解釋。由于是前置自增,所以二號位自己的值也變成了2。(4 = 2 + 2)
惡化接下來,我們把數量增加到3個
$a = 1; $result = $a + ++$a + ++$a; // $result === 7
為什么是7?按照思路,應該是 9 = 3 + 3 + 3,也是醉了,并沒有按照常理出牌。
增加到4個呢
$a = 1; $result = $a + ++$a + ++$a + ++$a; // $result === 11
答案也不是 16 = 4 + 4 + 4 + 4,好吧,和我想的不一樣。
猜測既然2個$a相加可以正確推算,而3個開始就出錯,為何?于是有了一個猜測,PHP是這樣相加的
$a = 1; $result = ( ( $a + ++$a ) + ++$a ) + ++$a; // $result === 11
優先級順序 () > ++ > +,11 = ( ( 2 + 2 ) + 3 ) + 4,每跳出一層,$a都自增了1。
有括號和沒有括號的運算,最終運算結果都是11,我有點確信隱形括號這個事實。
于是我只讓最后一個$a是自增的
$a = 1; $result_a = $a + $a + $a + ++$a; // $result_a === 5 $a = 1; $result_b = ( ( $a + $a) + $a ) + ++$a; // $result_b === 5
好的,$result_a 和 $result_b 的值是一樣的。5 = ( ( 1 + 1 ) + 1 ) + 2
我們此時加入后置自增,看看結果會不會一樣
$a = 1; $result_a = $a + $a + $a++ + ++$a; // $result_a === 6 $a = 1; $result_b = ( ( $a + $a) + $a++ ) + ++$a; // $result_b === 6
是的,遵循了隱形括號的規則, 6 = ( ( 1 + 1) + 1 ) + 3。
詭異的1為了給隱形括號做個最終的定論,我們再看一個燒腦例子
$a = 1; $result_a = $a + ++$a + ++$a; // $result_a === 7 $a = 1; $result_b = 1 + $a + ++$a + ++$a; // $result_b === 7
不不不,你沒有看錯,$result_b的前面真的多了一個1。但是,它們的值都是7。你知道為什么嗎?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28775.html
摘要:如果在中對數字或者字符串加減乘除處理不當的話會導致結果不夠嚴謹,通常的假如你需要處理加減乘除應該會是這樣比如出現問題等于比如出現問題等于但假如兩個類型不一致或者有精確度缺失就會導致一些問題的存在我們可以使用自帶的函數來做加減運算處理設 如果在PHP中對數字或者字符串加減乘除處理不當的話、會導致結果不夠嚴謹,通常的、假如你需要處理加減乘除應該會是這樣: $a = 1;$b = 2; $a...
摘要:二簡單工廠模式組成工廠類工廠模式的核心,通過調用它來實現其他類的功能。三工廠方法模式利用工廠方法模式可以有效解決簡單工廠模式破壞開閉原則的問題。 一、概念 1、工廠模式分為三類:(1)簡單工廠模式:一個工廠創建所有產品(2)工廠方法模式:一個工廠方法創建一個產品(3)抽象工廠模式:一個工廠方法創建一類產品 2、創建型模式這種模式是指將實例的創建和使用分離開來,隱藏類實例的創建細節,外界...
摘要:標準的日期格式簡單的日期加減計算默認時區今天今天昨天明天一周后一周零兩天四小時兩秒后下個星期四上個周一一個月前一個月后十年后運行結果今天今天昨天明天一周后一周零兩天四小時 PHP 標準的日期格式 date(Y-m-d H:i:s); PHP 簡單的日期加減計算 運行結果: 今天:2017-11-06 今天:2008-06-18 昨天:2017-11-05 明天:2017-11-07 ...
閱讀 3062·2021-11-24 10:34
閱讀 3322·2021-11-22 13:53
閱讀 2630·2021-11-22 12:03
閱讀 3598·2021-09-26 09:47
閱讀 3005·2021-09-23 11:21
閱讀 4772·2021-09-22 15:08
閱讀 3289·2021-07-23 10:59
閱讀 1258·2019-08-29 18:31