PHP 是什麼呢,簡單的說 PHP 是 Unix 系統上的 ASP,這樣一說相信大家應都知道 PHP 大概是什麼了吧。和 ASP 相比,PHP 似乎不太有人去注意,但其實國外使用 PHP 來建構網站己有很長的一段時間了,而國內現在也慢慢的對 PHP 有所重視了。
資料型態

  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(變數)
刪除變數,釋放其所配置的記憶體。