国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

你可能不知道的PHP加減法

JessYanCoding / 2911人閱讀

摘要:起因是這樣的,我們都知道語法里有自增操作,即,那么下面我列出一個表達式好的,為什么等于只有一種解釋,就是自增的優先級高于加減,所以二號位自增導致了一號位也變成。但是,它們的值都是。

這可能算不上是一次正規的解說,畢竟有點燒腦。

起因

是這樣的,我們都知道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處理數學精度

    摘要:后來我看了下,確實有這么一個擴展庫,處理任意精度數字,對于任意精度的數學,提供了支持用字符串表示的任意大小和精度的數字的二進制計算。 用編程語言做計算,很多時候浮點數精度都是困擾過我的問題,即便是剛學PHP的新手也會在群里問為什么我的計算結果明顯不對,而我們總是老態龍鐘的丟出一句浮點數計算都存在精度問題,并沒有提出過什么實質性的改善。比如下面的計算 0.57*100: zhgxun-p...

    chaos_G 評論0 收藏0
  • 關于PHP在企業中處理數字加減乘除和對比運算方案

    摘要:如果在中對數字或者字符串加減乘除處理不當的話會導致結果不夠嚴謹,通常的假如你需要處理加減乘除應該會是這樣比如出現問題等于比如出現問題等于但假如兩個類型不一致或者有精確度缺失就會導致一些問題的存在我們可以使用自帶的函數來做加減運算處理設 如果在PHP中對數字或者字符串加減乘除處理不當的話、會導致結果不夠嚴謹,通常的、假如你需要處理加減乘除應該會是這樣: $a = 1;$b = 2; $a...

    crossoverJie 評論0 收藏0
  • 設計模式學習筆記:工廠模式

    摘要:二簡單工廠模式組成工廠類工廠模式的核心,通過調用它來實現其他類的功能。三工廠方法模式利用工廠方法模式可以有效解決簡單工廠模式破壞開閉原則的問題。 一、概念 1、工廠模式分為三類:(1)簡單工廠模式:一個工廠創建所有產品(2)工廠方法模式:一個工廠方法創建一個產品(3)抽象工廠模式:一個工廠方法創建一類產品 2、創建型模式這種模式是指將實例的創建和使用分離開來,隱藏類實例的創建細節,外界...

    luxixing 評論0 收藏0
  • PHP 日期加減計算方法示例

    摘要:標準的日期格式簡單的日期加減計算默認時區今天今天昨天明天一周后一周零兩天四小時兩秒后下個星期四上個周一一個月前一個月后十年后運行結果今天今天昨天明天一周后一周零兩天四小時 PHP 標準的日期格式 date(Y-m-d H:i:s); PHP 簡單的日期加減計算 運行結果: 今天:2017-11-06 今天:2008-06-18 昨天:2017-11-05 明天:2017-11-07 ...

    notebin 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<