PHP 字符串的隱式轉換規則以及針對包含字母的字符串的遞增/遞減操做

以前一直對 PHP 中關於字符串的算數運算隱式類型轉換規則和遞增/遞減操做符針對字符串的操做比較模糊,今天總結一下。php

1、隱式轉換

二進制算術運算符的隱式類型轉換規則(http://php.net/manual/zh/language.types.string.phpspa

第一個操做數類型 第二個操做數類型 類型轉換
整型 浮點型 整型轉換爲浮點型
整型 字符串 字符串轉換爲數字,若是字符串轉換後是浮點型,整型也會轉換爲浮點型
浮點型 字符串 字符串轉換爲浮點型

總結一下就是浮點型 > 整型 > 字符串。例如:.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

  

 

 

2、自動遞增/遞減操做符

字母的自動遞增

自動遞增 結果
"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)
相關文章
相關標籤/搜索