## 類型轉換的判別
PHP在變量定義中不需要(或不支持)明確的類型定義;變量類型是根據使用該變量的上下文所決定的。也就是說,如果把一個string值賦給變量$var,$var就成了一個string。如果又把一個integer賦給$var,那它就成了一個integer。
PHP的自動類型轉換的一個例子是乘法運算符“\*”。如果任何一個操作數是float,則所有的操作數都被當成了float,結果也是float。否則操作數也會被解釋為integer,結果也是integer。注意這并沒有改變這些操作數本身的類型;改變的僅是這些操作數如何被求值以及表達式本身的 類型。
```
<?php
$foo = "1"; // $foo 是字符串(ASCII 49)
$foo *= 2; // $foo 現在是一個整數(2)
$foo = $foo * 1.3; // $foo現在是一個浮點數(2.6)
$foo = 5 * "10 Litle Piggis"; // $foo 是整數(50)
$foo = 5 * "10 Small Pigs"; // $foo 是整數(50)
```
如果上面兩個例子看上去古怪的話,參見[字符串轉換為數值](http://php.net/manual/zh/language.types.string.php#language.types.string.conversion)。
如果要強制將一個變量當做某種類型來求值,參見[類型強制轉換](http://php.net/manual/zh/language.types.type-juggling.php#language.types.typecasting)一節。如果要改變一個變量的類型,參見 [settype()](http://php.net/manual/zh/function.settype.php)。
如果想要測試本節中任何例子的話,可以用 [var\_dump()](http://php.net/manual/zh/function.var-dump.php) 函數。
> **Note**:
> 自動轉換為 數組 的行為目前沒有定義。
> 此外,由于 PHP 支持使用和數組下標同樣的語法訪問字符串下標,以下例子在所有 PHP 版本中都有效:
```
<?php
$a = 'car'; // $a is a string
$a[0] = 'b'; // $a is still a string
echo $a; // bar
```
## 類型強制轉換
PHP中的類型強制轉換和C中的非常像:在要轉換的變量之前加上用括號括起來的目標類型。
```
<?php
$foo = 10; // $foo is an integer
$bar = (boolean) $foo; // $bar is a boolean
```
允許的強制轉換有:
* (int), (integer) - 轉換為整形 [integer](http://php.net/manual/zh/language.types.integer.php)
* (bool), (boolean) - 轉換為布爾類型 [boolean](http://php.net/manual/zh/language.types.boolean.php)
* (float), (double), (real) - 轉換為浮點型 [float](http://php.net/manual/zh/language.types.float.php)
* (string) - 轉換為字符串 [string](http://php.net/manual/zh/language.types.string.php)
* (array) - 轉換為數組 [array](http://php.net/manual/zh/language.types.array.php)
* (object) - 轉換為對象 [object](http://php.net/manual/zh/language.types.object.php)
* (unset) - 轉換為 [NULL](http://php.net/manual/zh/language.types.null.php) (PHP 5)
(binary) 轉換和 b 前綴轉換支持為 PHP 5.2.1 新增。
注意在括號內允許有空格和制表符,所以下面兩個例子功能相同:
```
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
```
將字符串文字和變量轉換為二進制字符串:
```
<?php
$binary = (binary)$string;
$binary = b"binary string";
```
> Note 可以將變量放置在雙引號中的方式來代替將變量轉換成字符串:
```
<?php
$foo = 10; // $foo 是一個整數
$str = "$foo"; // $str 是一個字符串
$fst = (string)$foo; // $fst 也是一個字符串
// 輸出“they are the same”
if($fst === $str){
echo "they are the same";
}
?>
```
有時在類型之間強制轉換時確切地會發生什么可能不是很明顯。
* [轉換為布爾型](http://php.net/manual/zh/language.types.boolean.php#language.types.boolean.casting)
* [轉換為整型](http://php.net/manual/zh/language.types.integer.php#language.types.integer.casting)
* [轉換為浮點型](http://php.net/manual/zh/language.types.float.php#language.types.float.casting)
* [轉換為字符串](http://php.net/manual/zh/language.types.string.php#language.types.string.casting)
* [轉換為數組](http://php.net/manual/zh/language.types.array.php#language.types.array.casting)
* [轉換為對象](http://php.net/manual/zh/language.types.object.php#language.types.object.casting)
* [轉換為資源](http://php.net/manual/zh/language.types.resource.php#language.types.resource.casting)
* [轉換為 NULL](http://php.net/manual/zh/language.types.null.php#language.types.null.casting)
* [類型比較表](http://php.net/manual/zh/types.comparisons.php)
- 序言
- 簡介
- 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
- 函數
- 用戶自定義函數
- 函數的參數
- 返回值
- 可變函數
- 內部 (內置)函數
- 匿名函數
- 類與對象
- 簡介
- 基本概念
- 屬性
- 類的自動加載
- 構造函數
- 訪問控制(可見性)