PHP 型別轉換&&型別強制轉換
如果只是想得到一個易讀懂的型別的表達方式用於除錯,用 gettype()。
要檢視某個型別,不要用 gettype(),而用 is_type() 函式。
■字串轉換為數值
- 當一個字串被當作數字來求值時,根據以下規則來決定結果的型別和值。
- 如果包括“.”,“e”或“E”其中任何一個字元的話,字串被當作 float 來求值。否則就被當作整數。
- 該值由字串最前面的部分決定。如果字串以合法的數字資料開始,就用該數字作為其值,否則其值為 0(零)。合法數字資料由可選的正負號開始,後面跟著一個或多個數字(可選地包括十進位制分數),後面跟著可選的指數。指數是一個“e”或者“E”後面跟著一個或多個數字。
■強制型別強制轉換 (參考:PHP手冊)
PHP 中的型別強制轉換和 C 中的非常像:在要轉換的變數之前加上用括號括起來的目標型別。
允許的強制轉換有:
- (int),(integer) - 轉換成整型
- (bool),(boolean) - 轉換成布林型
- (float),(double),(real) - 轉換成浮點型
- (string) - 轉換成字串
- (array) - 轉換成陣列
- (object) - 轉換成物件
注意在括號內允許有空格和製表符
還可以用settype ( mixed var, string type )進行強制轉換.
1.強制轉換為布林值 (bool)|(boolean)
要明示地將一個值轉換成 boolean,用 (bool) 或者 (boolean) 來強制轉換。但是很多情況下不需要用強制轉換,因為當運算子,函式或者流程控制需要一個 boolean 引數時,該值會被自動轉換。
當轉換為 boolean 時,以下值被認為是 FALSE:
布林值 FALSE
整型值 0(零)
浮點型值 0.0(零)
空白字串和字串 "0"
沒有成員變數的陣列
沒有單元的物件(僅適用於 PHP 4)
特殊型別 NULL(包括尚未設定的變數)
所有其它值都被認為是 TRUE(包括任何資源)。
|
要明示地將一個值轉換為 integer,用 (int) 或 (integer) 強制轉換。不過大多數情況下都不需要強制轉換,因為當運算子,函式或流程控制需要一個 integer 引數時,值會自動轉換。還可以通過函式 intval() 來將一個值轉換成整型。
a.從bool轉換
b.從浮點數轉換 取整,超出範圍,結果不定
c.從字串轉換 參看字串轉換為數值
d.從其它型別轉換 先換成 bool值,再轉換
決不要將未知的分數強制轉換為 integer,這樣有時會導致意外的結果。
<?php
echo (int) ( (0.1+0.7) * 10 ); // 顯示 7
?>
$str = "123.456abc7"; // (int)123
echo (int)$str;
$str = "abc123.456"; // (int)0
$str = true; // (int)1
$str = false; // (int)0
3.強制轉換為浮點型 (int)|(double)|(real)|doubleval()|floatval()|intval()
精度: 0.12345678901234 // double,real都一樣
資料的丟失參 字串轉換為數值
4.強制換為字串 (string) |strval()
可以用 (string) 標記或者 strval() 函式將一個值轉換為字串。當某表示式需要字串時,字串的轉換會在表示式範圍內自動完成。例如當使用 echo() 或者 print() 函式時,或者將一個變數值與一個字串進行比較的時候。
- 布林值 TRUE 將被轉換為字串 "1",而值 FALSE 將被表示為 ""(即空字串)。這樣就可以隨意地在布林值和字串之間進行比較。
- 整數或浮點數數值在轉換成字串時,字串由表示這些數值的數字字元組成(浮點數還包含有指數部分)。
- 陣列將被轉換成字串 "Array",因此無法通過 echo() 或者 print() 函式來輸出陣列的內容。請參考下文以獲取更多提示。
- 物件將被轉換成字串 "Object"。如果因為除錯需要,需要將物件的成員變數列印出來,請閱讀下文。如果希望得到該物件所依附的類的名稱,請使用函式 get_class()。自 PHP 5 起,如果合適可以用 __toString() 方法。
- 資源型別總是以 "Resource id #1" 的格式被轉換成字串,其中 1 是 PHP 在執行時給資源指定的唯一標識。如果希望獲取資源的型別,請使用函式 get_resource_type()。
- NULL 將被轉換成空字串。
可以將 PHP 的值轉換為字串以永久地儲存它們。這種方法被稱為序列化,可以用函式 serialize() 來完成該操作。如果在安裝 PHP 時建立了 WDDX 支援,還可以將 PHP 的值序列化為 XML 結構。
4. 強制轉換為陣列 (array)
- 對於任何的型別:整型、浮點、字串、布林和資源,如果將一個值轉換為陣列,將得到一個僅有一個元素的陣列(其下標為 0),該元素即為此標量的值。
- 如果將一個物件轉換成一個陣列,所得到的陣列的元素為該物件的屬性(成員變數),其鍵名為成員變數名。
- 如果將一個
NULL
值轉換成陣列,將得到一個空陣列。
5. 轉換為物件 (object)
如果將一個物件轉換成物件,它將不會有任何變化。如果其它任何型別的值被轉換成物件,內建類 stdClass 的一個例項將被建立。如果該值為 NULL,則新的例項為空。陣列轉換成物件將使鍵名成為屬性名並具有相對應的值。對於任何其它的值,名為 scalar 的成員變數將包含該值
6. 轉換為資源 (無法轉換)
由於資源型別變數儲存有為開啟檔案、資料庫連線、圖形畫布區域等的特殊控制程式碼,因此無法將其它型別的值轉換為資源。
■PHP 型別比較表(看手冊附錄P)
以下的表格顯示了 PHP 型別和比較運算子在鬆散和嚴格比較時的作用。該補充材料還和型別戲法的相關章節內容有關。
- 注意
- HTML 表單並不傳遞整數、浮點數或者布林值,它們只傳遞字串。要想檢測一個字串是不是數字,可以使用 is_numeric() 函式。
- 在沒有定義變數 $x 的時候,諸如 if ($x) 的用法會導致一個 E_NOTICE 級別的錯誤。所以,可以考慮用 empty() 或者 isset() 函式來初始化變數。
相關文章
- java型別轉換與強制型別轉換(轉)Java型別
- 強制型別轉換型別
- 強制型別轉換之(==)型別
- C++強制型別轉換C++型別
- 造型與強制型別轉換型別
- C++ 的強制型別轉換C++型別
- JavaScript中的強制型別轉換JavaScript型別
- C C++ 強制型別轉換C++型別
- 深入淺出說強制型別轉換型別
- JS在if中的強制型別轉換JS型別
- c++四種強制型別轉換C++型別
- 引用型別變數的強制轉換型別變數
- javascript強制型別轉換與操作符JavaScript型別
- Javascript基礎之-強制型別轉換(三)JavaScript型別
- JavaScript強制型別轉換的背後操作JavaScript型別
- Javascript基礎之-強制型別轉換(一)JavaScript型別
- 型別轉換型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- 資料型別,型別轉換資料型別
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- C++ 中四種強制型別轉換的區別C++型別
- 3. php資料型別、資料型別轉換PHP資料型別
- js型別轉換JS型別
- 字元型別轉換字元型別
- 3.2 型別轉換型別
- JavaScript 型別轉換JavaScript型別
- Golang型別轉換Golang型別
- 型別轉換(cast)型別AST
- C++中的向上型別轉換和向下型別轉換C++型別
- 自學PHP筆記 (三) 型別轉換PHP筆記型別
- 自學PHP筆記(三) 型別轉換PHP筆記型別
- String.valueOf和強制型別轉換(String)的區別型別
- Java資料型別及型別轉換Java資料型別
- 字元型別轉換成時間型別字元型別
- Oracle Long型別轉換為Clob型別Oracle型別
- interface{} 型別的轉換型別
- JNI常用型別轉換型別
- 資料型別轉換資料型別