資料型態
| PHP 的資料型態有7種
- integer
- string
- floating-point numbers(double)
- object
- array
- pdfdoc
- pdfinfo
PHP 的變數是屬於鬆散的資料型別,因此在替變數初始化時並不用宣告變數的資料型態,PHP
會動態的決定變數的型別,例如:
範例: |
說明: |
$X = 1; $Y ="1"; $Z = 1.1; |
$X 為整數 integer $Y 為字串 string $Z 為浮點數
double |
PHP 的資料型態7種,但歸納起來可分為兩大為『數值資料』及『字串資料』。
數值資料 PHP
的數值表示法是以不違反數學慣例為原則,因此以下的範例都為正確的數值表示法:100、100.2、0、+120、-120 等
數值的運算 PHP 的數值運算有:
符號 |
意義 |
使用範例及說明 |
+ |
加號 |
$X = 1+1; //結果為2 |
- |
減號 |
$X = 1-1; //結果為0 |
* |
乘號 |
$X = 1*3; //結果為3 |
/ |
除號 |
$X = 4/2; //結果為2 |
% |
模號 |
$X = 10%3; //兩數相除之後取餘數,結果為1 |
++ |
遞增 |
$X = 3; $X++; //結果為4 |
-- |
遞減 |
$X = 3; $X--;
//結果為2 | 較為特殊的是++(遞增)及--(遞減)符號,這兩個符號不但可放在變數的右方也可以放在變數的左方,放在變數右方的稱為後置運算,放在變數左方的稱為前置運算,兩者的差別為:
範例:後置運算 |
結果: |
說明: |
$X = 1; $Y = 4+$X++; echo $X; echo $Y;
|
2 5 |
電腦執行 2+$X++ 時, 電腦會先將 2+$X 之值給 $Y, 之後再對 $X
做加1的動作 |
範例:前置運算 |
結果: |
說明: |
$X = 1; $Y = ++$X+4; echo $X; echo $Y;
|
2 6 |
電腦執行 ++$X+4 時, 電腦會先對 $X
加1之後再做加4的動作, 最後把所得之值給 $Y
| 由以上兩個範例可知,後置運算是在使用運算元之後,才進行加一或減一的動作。前置運算則是在使用運算元之前,先進行加一或減一的動作。
字串資料 字串是由一連串的字元所組成的,而在 PHP 中字串是以"及"所包含起來的,如:"HAP"、"HTML ASP PHP"、"我是園丁"、"123"、"123.45"、"12+30"
等都是字串。
須注意的是,由於雙引號「"」已經被用來當作字串前後的特殊字元,那我們要輸出一個雙引號時要怎麼辦呢?別緊張我們只要在雙引號之前加上「\」字元即可,如:echo "HAP \"HATM ASP PHP\"
網路共和國"則輸出為HAP "HATM ASP PHP" 網路共和國。
再舉一個例子
範例: |
輸出: |
$X = "網路共和國"; echo "HAP$X"; |
HAP網路共和國
| 耶?奇怪!怎麼會是『HAP網路共和國』呢?應該是『HAP$X』才對吧!! 不要以為是園丁寫錯了,沒錯,答案就是『HAP網路共和國』,為什麼呢?原因是在 PHP 中變數的開頭是「$」,因此只要是以「$」為開頭的字元或字串都會被認為是變數。這樣您應該知道為什麼結果是『HAP網路共和國』而不是『HAP$X』的原因了吧。 或許您又會問,那我要輸出『HAP$X』呢?其實作法也很簡單,只要在「$」符號之前加上「\」就行了,如:『HAP\$X』
由以上的說明可以得到一個結論,那就是在 PHP
中輸出特殊字元只要在前面加上「\」符號即可。而由「\」所表示的字元稱為跳脫字元,以下是跳脫字元的輸出對照表
跳脫字元 |
輸出結果 |
\" |
" |
\$ |
$ |
\\ |
\ |
\n |
換行字元 |
\r |
歸位字元 |
\t |
進格字元 |
\x00~\xFF |
以16進位表示 |
\x000~\x377 |
以8進位表示 |
串接運算 串接運算是將兩個資料連接起來,在 PHP
中所使用的串接符號為「.」,如『"HAP"."網路共和國"』則結果為『"HAP網路共和國"』。串接運算也可串接不同的資料型別,如:
範例: |
輸出: |
$X = 123 . 456; echo $X; $X =
123 . 0.456; echo $X; $X = "HAP"
. 123; echo $X; |
123456 1230.456 HAP123
|
另一種字串的表示法
之前所介紹的字串是以「"」(雙引號)所包圍起來的,而 PHP 也允許字串以「'」(單引號)來包起來,只不過以「"」(雙引號)及「'」(單引號)所包圍起來的字串有著不同的使用方式。 使用「"」(雙引號)所包圍起來的字串是以『變數最大』做為輸出的方式,也就是說,在字串出現「$」符號時即以變數來做表示,而以「'」(單引號)所表示的字串則否,以下是兩種字串的比較範例:
範例: |
輸出: |
$name = "園丁"; echo "name=$name"; echo
'name=$name'; |
name=園丁 name=$name
| 由以上的範例應該就可看出兩者的不同了。
以「'」(單引號)所包起來的字串,如果要輸出「'」(單引號)則須改成跳脫字元即可,就是在「'」(單引號)前加上「\」符號即可。 另外,單引號中的雙引號及雙引號中的單引號都視為有效字元,不須使用跳脫字元。
型態的轉換
| PHP
的資料型態是在計算時動態決定的,而不是由程式設計師決定,但如果要強制設定變數的型態的話該怎麼辦呢?別擔心,PHP 有提供轉換型態的函數。
字串轉換 所謂的字串轉換即是把字串轉換成數值。比如說我們要把某字串當成數值來作運算時,此時
PHP 便會進行字串轉換把字串變成數值資料來進行運算。在進行運算的過程中,是不會把原本的字串變數做變動的,除非有做指定的運算,如:
範例: |
輸出: |
說明: |
$a = "123abc";
$b = $a + 2;
echo "\$b=$b";
echo "\$a=$a";
$a = $a + 2;
echo "\$a=$a";
|
$b=125
$a=123abc
$a=125
|
$a 為字串
$b 為數值
$a 在運算時做了字串轉換,
但並未重新指定,因此 $a 仍為字串
$a 在運算時做了字串轉換,
且重新指定,因此 $a 為數值
| PHP 做字串轉換時有幾個重點:
- 只有字串開頭的部份會被當成數字;如果字串的開頭部份是合法的數值資料時,則該字串就被當成這個數值,否則為零,所以字串 "123abc"
在做字串轉換時會變成 123,但字串 "abc123" 則會變成 0。
- 字串也能轉換成浮點數,但轉換時必須是整個字串能剛好轉成浮點數;如:字串 "3.0"、"-3.0" 及 "3e3" 會被轉換成
3.0、-3.0 及 3000。但若字串中含有非浮點字元,則只能轉換成整數;如字串 "3.0abc" 會轉換成 3。
型態的轉變 除了字串能轉換成數值資之外,不同的資料型態也可依您的需求來做其它型態的轉換。
類型塑造 類型塑造可讓您更確實的轉換資料型態 語法:(型態) 變數
範例: |
說明: |
$a = 12.3;
$a = (string) $a;
$a = (double) $a;
$a = (int) $a;
|
$a 是浮點數
$a 轉換成字串
$a 轉換成浮點數
$a 轉換成整數
| 能轉換的型態有: (int)、(integer)、(double)、(float)、(real)、(string)、(array)、(object)
settype() 函數 settype()
也可轉換資料型態,若轉換成功則傳回 true ,否則傳回 false。 語法:settype(變數,"型態")
範例: |
說明: |
$a = 12.3;
settype( $a , "string");
settype( $a , "double");
settype( $a , "int");
|
$a 是浮點數
$a 轉換成字串
$a 轉換成浮點數
$a 轉換成整數
| 可轉換的型態有: integer、double、string、array、object
* val() 函數 PHP
提供了另一種方式來做型態的轉換,但這些函數是不能用在陣列及物件上的。 語法:變數 = *
val(變數) * val()
函數有:intval()轉換成整數、doubleval()轉換成浮點數、strval()轉換成字串。
範例: |
說明: |
$a = 12.3;
$a = strval($a);
$a = doubleval($a);
$a = intval($a);
|
$a 是浮點數
$a 轉換成字串
$a 轉換成浮點數
$a 轉換成整數
|
判斷資料的型態 除了做資料的轉換,我們也可以用一些函數來得知目前變數的資料型態。
gettype 函數 語法:gettype(變數)
範例: |
輸出: |
$a = 12.3;
echo gettype($a);
|
double
| gettype() 的傳回值有:
integer、double、string、array、object、class、unknown type
is *() 函數 語法:is *(變數) is *()
函數有: is_int()、is_integer()、is_long():判斷是否為整數,若為整數則傳回 true ,否則傳回
false。 is_double()、is_float()、is_real():判斷是否為浮點數,若為浮點數則傳回 true ,否則傳回
false。 is_string():判斷是否為字串,若為字串則傳回 true ,否則傳回
false。 is_array:判斷是否為陣列,若為陣列則傳回 true ,否則傳回
false。 is_object:判斷是否為物件,若為物件則傳回 true ,否則傳回 false。
範例: |
輸出: |
$a = 12.3;
if (is_double($a))
echo "是浮點數";
else
echo "不是浮點數";
|
是浮點數
|
其它有關變數的函數
isset() 函數 語法:isset(變數) 判斷變數是否具備任何值,若有值則傳回 true,沒有任何值則傳回 false。
empty() 函數 語法:empty(變數) 與 isset() 函數相反,isset() 函數是判斷是否有值,而
empty() 函數則是判斷變數是否沒有任何值、或為零、或為空字串,若是則傳回 true,否則傳回 false。
unset() 函數 語法:unset(變數) 刪除變數,釋放其所配置的記憶體。
|