以前一直對 PHP 中關於字符串的算數運算隱式類型轉換規則和遞增/遞減操做符針對字符串的操做比較模糊,今天總結一下。php
二進制算術運算符的隱式類型轉換規則(http://php.net/manual/zh/language.types.string.php)spa
第一個操做數類型 | 第二個操做數類型 | 類型轉換 |
整型 | 浮點型 | 整型轉換爲浮點型 |
整型 | 字符串 | 字符串轉換爲數字,若是字符串轉換後是浮點型,整型也會轉換爲浮點型 |
浮點型 | 字符串 | 字符串轉換爲浮點型 |
總結一下就是浮點型 > 整型 > 字符串。例如:.net
整型 + 浮點型 = 浮點型blog
$a = 12; $b = 1.5; $c = $a + $b; var_dump($c); // float 13.5
整型 + (非 數字和. 開頭的)字符串 = 整型字符串
$a = 12; $b = 'hello1.5'; $c = $a + $b; var_dump($c); // int 12
這裏 $b 從字符串轉換成整型後變成了 0get
整型 + 浮點型數字開頭的字符串 = 浮點型string
$a = 12; $b = '1.5hello'; $c = $a + $b; var_dump($c); // float 13.5
$b 自動轉換成了 float 1.5table
整型 + 整型數字開頭的字符串 = 整型class
$a = 12; $b = '1hello'; $c = $a + $b; var_dump($c); // int 13
整型 + 浮點型數字的字符串 = 浮點型二進制
$a = 12; $b = '1.5'; $c = $a + $b; var_dump($c); // float 13.5
整型 + (以.開頭的)字符串 = 浮點型 或 整型
$a = 12; $b = '.5hello'; $c = $a + $b; var_dump($c); // float 12.5
$b 轉換成了 0.5
$a = 12; $b = '.hello'; $c = $a + $b; var_dump($c); // int 12
$b 不會轉換爲 float 0.0 而是轉換成 int 0
整型 + 包含大寫 E 或小寫 e 的字符串(須要知足科學記數法的格式,必需要有尾數) = 浮點型
$a = 1; $b = '1e3'; $c = $a + $b; var_dump($c); // float 1001
$a = 1; $b = '1e-3'; $c = $a + $b; var_dump($c); // float 1.001
整型 + 十六進制數字的字符串 = 整型
$a = 1; $b = '0x10'; $c = $a + $b; var_dump($c); // int 17
字母的自動遞增
自動遞增 | 結果 |
"a" | "b" |
"z" | "aa" |
"spaz" | "spba" |
"b9" | "c0" |
"12" | "13" |
例1:一個字母進行遞增,結果是它在字母表中的下一個字母
$a = 'a'; var_dump(++$a); // string 'b' (length=1)
例2:
$a = 'a'; var_dump(--$a); // string 'a' (length=1)
例3:"z" 或 "Z" 進行遞增,會變成 "a" 或 "A",且字符左邊的字符再遞增(若是結果的 "a" 或 "A" 位於字符串左邊第一個字符,那麼還須要在它的左邊再插入一個 "a" 或 "A")
$a = 'z'; var_dump(++$a); // string 'aa' (length=2)
例4:
$a = 'z1'; var_dump(++$a); // string 'z2' (length=2)
例5:
$a = 'z9'; var_dump(++$a); // string 'aa0' (length=3)
例6:
$a = 'b9'; var_dump(++$a); // string 'c0' (length=2)
例7:
$a = 'spaz'; var_dump(++$a); // string 'spba' (length=4)
例8:
$a = 'bz'; var_dump(++$a); // string 'ca' (length=2)
例9:
$a = '1z'; var_dump(++$a); // string '2a' (length=2)
例10:
$a = '*a'; var_dump(++$a); // string '*b' (length=2)
例11:
$a = '*a*'; var_dump(++$a); // string '*a*' (length=3)
例12:
$a = 'a*'; var_dump(++$a); // string 'a*' (length=2)