初探語法變數與常數外部變數環境變數運算元流程控制引用檔案函數物件
PHP 簡介

資料型態

 PHP 支援 integer, double, string, array, object 等五種資料型態。

Integer
 integer 為整數型別。在 32 位元的作業系統中,它的有效範圍為 -2,147,483,648 ∼ 2,147,483,647。要使用十六進位整數可以在面加 0x;要使用八進位整數可以在面加 0。
例:
 <?
 $a = 1234;     // 十進位
 $a = -1234;    // 負數
 $a = 0123;     // 八進位
 $a = 0x12;     // 十六進位
 ?>

Double
 double 為浮點數型別。在 32 位元的作業系統中,它的有效範圍為 1.7E-308 ∼ 1.7E+308。
例:
 <?
 $a = 1.234;
 $a = 1.2e3;
 ?>

String
 string 為字串型別。在 PHP 中有三種指定字串的方法:雙引號(")、單引號('),以及所謂 heredoc 語法(<<<)。
1. 雙引號
 包含在雙引號裡頭的可以是一般文字字串,可以含有單引號;如果含有變數的話,會以該變數的值代入。與 C、Perl 一樣,PHP 也允許以「\」代表跳脫(escape)字元,在雙引號中加入具有特殊用途的符號,如:
 \n:換行(newline)
 \r:送出 CR(carriage)
 \t:跳位(Tab)
 \\:反斜線(backslash)
 \$:錢字號(dollar sign)
 \":雙引號(double-quote)
 \[0-7]{1,3}:八進位表示法的 regular expression
 \x[0-9A-Fa-f]{1,2}:十六進位表示法的 regular expression
例:
 <?
 $str_1 = "I am here!";
 $str_2 = "str_1 : $str_1";
 echo $str_2;
 ?>
 輸出的結果將是:str_1 : I am here!,原先被包含在雙引號中的變數($str_1)以其值代入了。
2. 單引號
 使用單引號要注意的是,在單引號中的變數不會以變數值代入。另外,可以被 escape 的字元只有兩個:\'\\
例:
 <?
 $str_1 = 'I am here!';
 $str_2 = 'str_1 : $str_1';
 echo $str_2;
 ?>
 輸出的結果將是:str_1 : $str_1,原先被包含在單引號中的變數($str_1)不會被其值所取代。
3. heredoc synex
 這種設定字串的方法只在 PHP4 提供,主要用於引用一整段文字,如:
 <?
 $a = "abc";
 $str = <<< CHENSH
 中文"測試"有雙引號<br>
 中文'測試' $a 有單引號與變數
 CHENSH;
 echo $str;
 ?>
 輸出的 HTML 碼:

 中文"測試"有雙引號<br>
 中文'測試' abc 有單引號與變數
 上述的 CHENSH 是用來標示文字段落起迄位置的 identifier,可自行命名。另外,結束的 identifier 一定要放在該行的行首,否則將導致錯誤。

Array
 array 為陣列型別。可以是二維、三維或者多維陣列,其中的元素也很自由,可以是 string、integer 或者 double,甚至是 array。陣列由第 0 個元素開始配置。
例:
 <?
 $a[0] = 1234;
 $b[0][] = 567.8;
 $c = array(9, 10, 'A');
 ?>

Object
 object 為物件型別。物件的使用上就比較麻煩了,要先宣告類別,甚至必須先要有方法,方可使用物件。
例:
 <?
 class foo {
   function do_foo () {
     echo "Doing foo.";
   }
 }

 $bar = new foo;
 $bar -> do_foo ();
 ?>
 執行結果:

 Doing foo.

型態轉換
 您可以強迫將變數的型態轉換,例如:
 <?
 $a = 10;    // $a is an integer
 $b = (double)$a;    // $b is an double
 ?>
 當字串被轉換成值數值資料時,原則上是:
  • 如果字串含有 .eE,則當成是 double 型態,否則視為 integer。
  • 以字串的開頭字元能否辨識為準,無法辨識的均轉為數值 0。
例:
 <?
 $foo = 1 + "10.5";                   // $foo is float (11.5)
 $foo = 1 + "-1.3e3";                // $foo is float (-1299)
 $foo = 1 + "bob-1.3e3";          // $foo is integer (1)
 $foo = 1 + "bob3";                  // $foo is integer (1)
 $foo = 1 + "10 Small Pigs";     // $foo is integer (11)
 $foo = 1 + "10 Little Piggies"; // $foo is integer (11)
 $foo = "10.0 pigs " + 1;           // $foo is integer (11)
 $foo = "10.0 pigs " + 1.0;        // $foo is float (11)
 ?>
題外話:

 我曾經在某支需要針對文字內容進行比對的程式裡犯錯,然後花了好一番功夫才發現問題的癥結所在。

 那支程式中會出現多個字串變數(如:1A10, 43F2 等等),長度都是 4 個字元,我將它們拿來與「1000」這個字串進行比對,其值大於後者的話,就執行某項動作;否則,就執行另一項動作。那段程式就像這樣:

 if ( $X > "1000" ) ......

 在多數的情況下,它都能如我所願地進行;直到有一次,$X 的值為「1E00」時,才讓我警覺上述的語法是有瑕疵的,因為「1E00」可能會被視為浮點數型別的變數。

 所以這段判別式得改一改,要利用 strcmp( ) 函數來進行逐字元比對才行:

 if ( strcmp($X, "1000") > 0 ) ......


初探語法變數與常數外部變數環境變數運算元流程控制引用檔案函數物件