## Integer 整型(標量)
integer 是集合 ? = {..., -2, -1, 0, 1, 2, ...} 中的某個數。
參見:
* [任意長度整數/GMP](http://php.net/manual/zh/book.gmp.php)
* [浮點型](http://php.net/manual/zh/language.types.float.php)
* [任意精度數學庫/BCMath](http://php.net/manual/zh/book.bc.php)
### 語法
整型值可以使用十進制,十六進制,八進制或二進制表示,前面可以加上可選的符號(- 或者 +)。
二進制表達的 integer自 PHP 5.4.0 起可用。
要使用八進制表達,數字前必須加上 *0*(零)。要使用十六進制表達,數字前必須加上 *0x*。要使用二進制表達,數字前必須加上 *0b*。
**Example #1 整數文字表達**
```
<?php
$a?=?1234;?//?十進制數
$a?=?-123;?//?負數
$a?=?0123;?//?八進制數?(等于十進制?83)
$a?=?0x1A;?//?十六進制數?(等于十進制?26)
$a?=?0b11111111;?//?二進制數字?(等于十進制?255)
?>
```
整型數的字長和平臺有關,盡管通常最大值是大約二十億(32 位有符號)。64 位平臺下的最大值通常是大約 9E18,除了 Windows 下 PHP 7 以前的版本,總是 32 位的。 PHP 不支持無符號的 integer。Integer值的字長可以用常量 \*\*`PHP_INT_SIZE`\*\*來表示,自 PHP 4.4.0 和 PHP 5.0.5后,最大值可以用常量 \*\*`PHP_INT_MAX**` 來表示,最小值可以在 PHP 7.0.0 及以后的版本中用常量 \*\*`PHP_INT_MIN**` 表示。
> **Warning**
> PHP 7 以前的版本里,如果向八進制數傳遞了一個非法數字(即 8 或 9),則后面其余數字會被忽略。PHP 7 以后,會產生 Parse Error。
### 整數溢出
如果給定的一個數超出了 integer 的范圍,將會被解釋為 float。同樣如果執行的運算結果超出了 integer范圍,也會返回 float。
**Example #2 32 位系統下的整數溢出**
```
<?php
$large_number?=?2147483647;
var_dump($large_number);?????????????????????//?int(2147483647)
$large_number?=?2147483648;
var_dump($large_number);?????????????????????//?float(2147483648)
$million?=?1000000;
$large_number?=??50000?*?$million;
var_dump($large_number);?????????????????????//?float(50000000000)
?>
```
**Example #3 64 位系統下的整數溢出**
```
<?php
$large_number?=?9223372036854775807;
var_dump($large_number);?????????????????????//?int(9223372036854775807)
$large_number?=?9223372036854775808;
var_dump($large_number);?????????????????????//?float(9.2233720368548E+18)
$million?=?1000000;
$large_number?=??50000000000000?*?$million;
var_dump($large_number);?????????????????????//?float(5.0E+19)
?>
```
PHP 中沒有整除的運算符。*1/2* 產生出 float *0.5*。 值可以舍棄小數部分,強制轉換為 integer,或者使用 [round()](http://php.net/manual/zh/function.round.php) 函數可以更好地進行四舍五入。
```
<?php
var_dump(25/7);?????????//?float(3.5714285714286)?
var_dump((int)?(25/7));?//?int(3)
var_dump(round(25/7));??//?float(4)?
?>
```
### 轉換為整型
要明確地將一個值轉換為 integer,用 *(int)* 或 *(integer)* 強制轉換。不過大多數情況下都不需要強制轉換,因為當運算符,函數或流程控制需要一個 integer參數時,值會自動轉換。還可以通過函數 [intval()](http://php.net/manual/zh/function.intval.php) 來將一個值轉換成整型。
將 [resource](http://php.net/manual/zh/language.types.resource.php) 轉換成 intege時, 結果會是 PHP 運行時為 [resource](http://php.net/manual/zh/language.types.resource.php) 分配的唯一資源號。
參見:[類型轉換的判別](http://php.net/manual/zh/language.types.type-juggling.php)。
#### 從[布爾值](http://php.net/manual/zh/language.types.boolean.php)轉換
**`FALSE**` 將產生出 *0*(零),`**TRUE**` 將產生出 *1*(壹)。
#### 從[浮點型](http://php.net/manual/zh/language.types.float.php)轉換
當從浮點數轉換成整數時,將*向下*取整。
如果浮點數超出了整數范圍(32 位平臺下通常為 *+/- 2.15e+9 = 2^31*,64 位平臺下,除了 Windows,通常為 *+/- 9.22e+18 = 2^63*),則結果為未定義,因為沒有足夠的精度給出一個確切的整數結果。在此情況下沒有警告,甚至沒有任何通知!
> **Note**:
> PHP 7.0.0 起,NaN 和 Infinity 在轉換成 integer時,不再是 undefined 或者依賴于平臺,而是都會變成零。
> **Warning**
絕不要將未知的分數強制轉換為 integer,這樣有時會導致不可預料的結果。
```
<?php
echo?(int)?(?(0.1+0.7)?*?10?);?//?顯示?7!
?>
```
參見[關于浮點數精度的警告](http://php.net/manual/zh/language.types.float.php#warn.float-precision)。
#### 從字符串轉換
參見[字符串轉換為數值](http://php.net/manual/zh/language.types.string.php#language.types.string.conversion)。
#### 從其它類型轉換
> **Caution**
> 沒有定義從其它類型轉換為整型的行為。*不要*依賴任何現有的行為,因為它會未加通知地改變。
- 序言
- 簡介
- PHP是什么?
- PHP能做什么?
- 基本語法
- 類型
- boolean(布爾型)
- integer(整型)
- float(浮點型)
- string(字符串)
- array(數組)
- object(對象)
- callable(可調用)
- resource(資源)
- NULL(無類型)
- 偽類型
- 類型轉換的判別
- 變量
- 基礎
- 預定義變量
- 變量范圍
- 可變變量
- 來自PHP之外的變量
- 常量
- 語法
- 魔術常量
- 表達式
- 運算符
- 運算符優先級
- 算術運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 錯誤控制運算符
- 執行運算符
- 遞增/遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- if
- else
- elseif/else if
- 流程控制的替代語法
- while
- do-whille
- for
- foreach
- break
- continue
- switch
- declare
- return
- require
- include
- require_once
- include_once
- goto
- 函數
- 用戶自定義函數
- 函數的參數
- 返回值
- 可變函數
- 內部 (內置)函數
- 匿名函數
- 類與對象
- 簡介
- 基本概念
- 屬性
- 類的自動加載
- 構造函數
- 訪問控制(可見性)