摘要:起因是這樣的,我們都知道語法里有自增操作,即,那么下面我列出一個表達(dá)式好的,為什么等于只有一種解釋,就是自增的優(yōu)先級高于加減,所以二號位自增導(dǎo)致了一號位也變成。但是,它們的值都是。
這可能算不上是一次正規(guī)的解說,畢竟有點燒腦。
起因是這樣的,我們都知道php語法里有自增操作,即 ++,那么下面我列出一個表達(dá)式
$a = 1; $result = $a + $a++; // $result === 3
好的,為什么等于3?只有一種解釋,就是自增的優(yōu)先級高于加減,所以二號位自增導(dǎo)致了一號位也變成2。(3 = 2 + 1)
既然一號位變成了2,為何二號位不會變成2呢?因為后置自增的返回值僅是臨時變量,這點和 C/C++是一致的,畢竟PHP也是基于C實現(xiàn)的。
換個寫法
$a = 1; $result = $a + ++$a; // $result === 4
似乎驗證了剛才的解釋。由于是前置自增,所以二號位自己的值也變成了2。(4 = 2 + 2)
惡化接下來,我們把數(shù)量增加到3個
$a = 1; $result = $a + ++$a + ++$a; // $result === 7
為什么是7?按照思路,應(yīng)該是 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
優(yōu)先級順序 () > ++ > +,11 = ( ( 2 + 2 ) + 3 ) + 4,每跳出一層,$a都自增了1。
有括號和沒有括號的運算,最終運算結(jié)果都是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
我們此時加入后置自增,看看結(jié)果會不會一樣
$a = 1; $result_a = $a + $a + $a++ + ++$a; // $result_a === 6 $a = 1; $result_b = ( ( $a + $a) + $a++ ) + ++$a; // $result_b === 6
是的,遵循了隱形括號的規(guī)則, 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。你知道為什么嗎?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28775.html
摘要:后來我看了下,確實有這么一個擴展庫,處理任意精度數(shù)字,對于任意精度的數(shù)學(xué),提供了支持用字符串表示的任意大小和精度的數(shù)字的二進制計算。 用編程語言做計算,很多時候浮點數(shù)精度都是困擾過我的問題,即便是剛學(xué)PHP的新手也會在群里問為什么我的計算結(jié)果明顯不對,而我們總是老態(tài)龍鐘的丟出一句浮點數(shù)計算都存在精度問題,并沒有提出過什么實質(zhì)性的改善。比如下面的計算 0.57*100: zhgxun-p...
摘要:如果在中對數(shù)字或者字符串加減乘除處理不當(dāng)?shù)脑挄?dǎo)致結(jié)果不夠嚴(yán)謹(jǐn),通常的假如你需要處理加減乘除應(yīng)該會是這樣比如出現(xiàn)問題等于比如出現(xiàn)問題等于但假如兩個類型不一致或者有精確度缺失就會導(dǎo)致一些問題的存在我們可以使用自帶的函數(shù)來做加減運算處理設(shè) 如果在PHP中對數(shù)字或者字符串加減乘除處理不當(dāng)?shù)脑?、會?dǎo)致結(jié)果不夠嚴(yán)謹(jǐn),通常的、假如你需要處理加減乘除應(yīng)該會是這樣: $a = 1;$b = 2; $a...
摘要:二簡單工廠模式組成工廠類工廠模式的核心,通過調(diào)用它來實現(xiàn)其他類的功能。三工廠方法模式利用工廠方法模式可以有效解決簡單工廠模式破壞開閉原則的問題。 一、概念 1、工廠模式分為三類:(1)簡單工廠模式:一個工廠創(chuàng)建所有產(chǎn)品(2)工廠方法模式:一個工廠方法創(chuàng)建一個產(chǎn)品(3)抽象工廠模式:一個工廠方法創(chuàng)建一類產(chǎn)品 2、創(chuàng)建型模式這種模式是指將實例的創(chuàng)建和使用分離開來,隱藏類實例的創(chuàng)建細(xì)節(jié),外界...
摘要:標(biāo)準(zhǔn)的日期格式簡單的日期加減計算默認(rèn)時區(qū)今天今天昨天明天一周后一周零兩天四小時兩秒后下個星期四上個周一一個月前一個月后十年后運行結(jié)果今天今天昨天明天一周后一周零兩天四小時 PHP 標(biāo)準(zhǔn)的日期格式 date(Y-m-d H:i:s); PHP 簡單的日期加減計算 運行結(jié)果: 今天:2017-11-06 今天:2008-06-18 昨天:2017-11-05 明天:2017-11-07 ...
閱讀 3106·2021-11-24 10:34
閱讀 3351·2021-11-22 13:53
閱讀 2657·2021-11-22 12:03
閱讀 3624·2021-09-26 09:47
閱讀 3033·2021-09-23 11:21
閱讀 4871·2021-09-22 15:08
閱讀 3340·2021-07-23 10:59
閱讀 1285·2019-08-29 18:31