PHP程式設計 三、PHP基本語法 建國科技大學 資訊管理學系 饒瑞佶
PHP 基本語法介紹
PHP基本語法 內嵌在HTML標籤中,使用 <?php php程式 ?> 或 <% php程式 %> 或(ASP亦使用此表示,要設定php.ini ) <script language=“php”>php程式</script> 標示 需要經由Apache Server轉譯後才可以動作 副檔名為 .php或 .php3 每個命令結尾需要加上; phpinfo() 裡面蘊藏無數資料,請善加利用
PHP基本語法 <html> <title>PHP標籤</title> <body> PHP的四種寫法<p> <?php echo "利用< ?php ? >的PHP寫法" ; ?> <hr><p> <script language="php"> echo "利用Script的寫法" ; </script> <? echo "利用< ? ? >的PHP寫法" ; echo "這種寫法必須將php.ini中的short_open_tags設定為On才可以使用" ; <% echo "利用< % % >的PHP寫法<BR>" ; echo "這種寫法必須將php.ini中的asp_tags設定為On才可以使用" ; %> </body> </html>
PHP基本語法 程式註解,使用 // 或 # 表示單行註解 (c++ 註解的風格 ) /* 中間文字是註解 */ 表示多行註解 /* 中間文字是註解 */ 表示多行註解 註解內不可以再出現註解符號 ///////* ? /* xxxx// */ ? PHP不像HTML可以直接使用瀏覽器執行
PHP基本語法-基本輸出 輸出指令 echo() 與 print() (phptest1.php,p2-2) PHP與HTML 單引號與雙引號對變數處理的方式不同 使用echo會比print略有效率。 簡略寫法<?= ?> PHP與HTML 嵌入HTML標籤中 在HTML標籤外 獨立存在
PHP 資料型態
PHP資料型態 在PHP中,變數之前必需加$的符號 PHP的大小寫是有差別的,所以在使用變數時,須注意大小寫是否一致 變數使用前不需要事先宣告(「鬆散」的變數型態 ) 使用變數時被指定的值的型態就是變數的型態 PHP共有 8 種資料型態
PHP資料型態 名稱 型態 範例 Boolean 布林型態 $a=True; Integer 整數型態 $a=10; Float 浮點數型態 String 字串型態 $a=“Hello !!”; Array 陣列型態 $a[0]=20; Object 物件型態 $a=new Objectclass; Resource 外部資源 $a=mysql_connect(); Null Null型態 $a=NULL;
Boolean布林型態 只有真(True)與假(False)兩種值 可以直接設定 $a=True; $b=False; 其他型態轉換成布林型態
Integer整數型態 10進制,8進制(0)與16進制(0x)三種 表示方法 [+|-] [0|0x] 數值 $a=123;(10進制) $b=-456;(10進制) $c=0123;(8進制相當於10進制的83) $d=0x45;(16進制相當於10進制的69)
Integer整數型態 <html> <title>整數</title> <body> <? $A=12 ; $B=-34 ; $C=012; $D=0x12 ; echo "A=$A <BR> B=$B <BR> C=$C <BR> D=$D"; ?> </body> </html>
Double浮點數型態 一般與指數二種表示法 表示方法 $a=12.3456;(一般) $b=-123.456;(一般負浮點數) $c=1.23e-2;(指數) $d=1.23e2;(指數)
Double浮點數型態 <html> <title>浮點數</title> <body> <? $A=12.3456 ; $B=-123.456 ; $C=1.23456789e-2; $D=1.23456789e2 ; echo "A=$A <BR> B=$B <BR> C=$C <BR> D=$D" ; ?> </body> </html>
String型態 文字的串列組合 在 PHP 中有三種指定字串的方法: 雙引號(“) 單引號(‘) here doc 語法(<<<)(補充)
String型態-雙引號 包含在雙引號裡頭的可以是一般文字字串。 如果含有變數的話,會以該變數的值代入。 與 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)以其值代入了。
String型態-單引號 使用單引號要注意的是,在單引號中的變數不會以變數值代入。 另外,可以被 escape 的字元只有兩個:\‘ 與 \\。 例:<? $str_1 = 'I am here!'; $str_2 = 'str_1 : $str_1'; echo $str_2; ?> 輸出的結果將是:str_1 : $str_1,原先被包含在單引號中的變數($str_1)不會被其值所取代。 範例7-3
String型態-單引號 <html> <title>字串</title> <body> <? $A = "Hello " ; $B = "my friend.<br>\n" ; $C = "Today is sunday." ; echo "$A $B $C <hr>" ; echo "\$A=$A \$B=$B \$C=$C" ; ?> </body> </html>
String型態 兩個字串可以以”.”符號進行連接。 (string_cat.php) 字串函數 http://www.peterpanstudio.com/ver_two/cgi/index_php.htm http://tw2.php.net/manual/en/funcref.php
String型態-here doc 這種設定字串的方法只在 PHP4 提供,主要用於引用一整段文字,如: <? $a = “abc”; $str = <<< CHENSH 中文“測試”有雙引號<br> 中文‘測試’ $a 有單引號與變數 CHENSH; echo $str; ?> 輸出的 HTML 碼: 中文“測試”有雙引號 中文‘測試’ abc 有單引號與變數 上述的 CHENSH 是用來標示文字段落起迄位置的 identifier,可自行命名。另外,結束的 identifier 一定要放在該行的行首,否則將導致錯誤。
Array陣列型態 http://www.jollen.org/php/ebook/ch12.html 集合相同屬性的變數所成的集合。 可以是二維、三維或者多維陣列,其中的元素也很自由,可以是 string、integer 或者 double,甚至是 array。 語法:$陣列名稱[指標] 陣列由第 0 個元素開始配置。 例: $a[0] = 1234; $a[1] = 567; $a = array(1234, 567); http://www.jollen.org/php/ebook/ch12.html $car0 $car1 $car2 $car3 $car4 $car[0] $car[1] $car[2] $car[3] $car[4] Array1.php
Object物件型態 類別(資料成員與成員函數)與物件(使用類別)。 物件的使用上比較麻煩,要先宣告類別,甚至必須先要有方法,方可使用物件。 例: <? class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar -> do_foo (); ?> 執行結果: Doing foo. 先宣告類別
<? class table { var $color ; function set_color($new_color){ $this->color=$new_color ; } function show_color() { echo $this->color; echo "<br>\n" ; } } ?> <html> <title>物件</title> <body> <?php $T=new table() ; $D=new table() ; $T->set_color("Red") ; $D->set_color("Blue") ; echo "T table color is " ; $T->show_color() ; echo "D table coloe is " ; $D->show_color() ; </body> </html>
資源型態 負責與外部資源(檔案、資料庫、 影像等)聯繫。 不可以直接操作,需要透過特殊函數才能操作。 例如MySQL,需要透過MySQL函數來操作。 無法進行型態轉換
資源型態 <? $link=mysql_connect("localhost","","") or die("無法連接"); mysql_select_db("mysql") or die("無法開啟資料庫"); $query="select * from user"; $result=mysql_query($query); while($my_row=mysql_fetch_array($result)) { echo $my_row[0].$my_row[1].$my_row[2]; echo "<br>"; } mysql_free_result($result); mysql_close($link); ?>
Null型態 表示變數裏沒有任何值,而不是0。 例如: $n1=NULL; unset($n2); //清除變數內容變成Null echo $n1; echo $n2; echo $n3;
型態轉換 您可以強迫將變數的型態轉換,例如: <? $a = 10; // $a is an integer $b = (double)$a; // $b is an double ?> 當字串被轉換成數值資料時,原則上是: 1. 如果字串含有 .、e 或 E,則當成是 double 型態,否則視為 integer。 2. 以字串的開頭字元能否辨識為準,無法辨識的均轉為數值 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) ?>
PHP 變數 Variable
變數 用來暫存程式執行的結果或資料 命名規則: 一定以$為第一個字元 第二個字元必須是字母或底線_ 大小寫有別 $a與$A不同 盡量以有意義的名稱命名 不可使用關鍵字 如echo
變數 設定初始值 變數的資料型態由設定的初始值決定 指定立即值 $A = 100; 指定運算式 $A = $B+$C; 程式設計中的”=“符號代表指定,不表示等於 代表將等號右邊的值指定給等號左邊 而在PHP中可以有傳值設定與傳址設定兩種方式
傳值設定 Assign by copy 透過”=“符號複製立即值或運算結果給另一個變數 電腦記憶體中有兩份相同的資料,不過是存放位置不同 兩者互相獨立
傳值設定 Assign by copy <html> <title>傳值設定</title> <body> <? $A=10 ; $B=$A ; $B=$B+10 ; echo "\$A=$A <br>" ; echo "\$B=$B" ; ?> </body> </html>
傳址設定 Assign by reference 透過”=“符號複製等號右邊變數的儲存位置給等號左邊的變數 電腦記憶體中只有一份資料 兩者指的是同一個位置,更動任何一個變數值都會立即影響另外一個變數的值 設定方式:變數前再加上”&”符號 $A=&$B; 範例 8-3
傳址設定 Assign by reference <html> <title>變數值設定</title> <body> <? $A = 10 ; // $A的值為10 $B = $A ; // $A的值複製給$B $C = &$A ; // $A的記憶體位置給$C echo "執行計算前 <br>"; echo "A=$A <br>" ; echo "B=$B <br>"; echo "C=$C <p>"; $B=$B+10 ; // $B的值加10 $C=$C+20 ; // $C的值加20 echo "執行計算後:<br>" ; echo "A=$A <br>"; // 顯示$A,$B,$C的值 echo "B=$B <br>" ; echo "C=$C "; ?> </body> </html>
PHP變數型態 全域變數 區域變數 靜態變數 動態變數 預設變數 外部變數
變數影響範圍 變數的影響範圍通常是全域( global),自設定起,至該程式結束均有效 在自定的函數中,變數的影響範圍是區域( local),只侷限在函數內部。例: <? $a = 1; $b = 2; function sum_test( ) { return $a + $b; } echo sum_test( ); ?> 執行結果為 0,因為 $a 與 $b 的影響範圍無法達到 sum_test( ) 內部。
變數影響範圍-區域變數 <? Function MyFunction(){ echo "<< 在函數中 >> <br>" ; echo "設定前: <br>"; echo "A = $A <br>" ; echo "B = $B <p>" ; $A=10 ; // 區域變數 $B=20 ; echo "設定後: <br>"; } ?> <html> <title>區域變數</title> <body> $A = 1 ; // 全域變數 $B = 2 ; // 全域變數 MyFunction() ; echo "<< 在函數外 >> <br> "; </body> </html>
變數影響範圍 若希望在自定函數內引用外部的變數,則使用關鍵字 global 宣告,或是使用 global 變數陣列 $GLOBALS[ 變數名稱]。 例:<? $a = 1; $b = 2; function sum_test_1( ) { global $a, $b; return $a + $b; } function sum_test_2( ) { return $GLOBALS[“a”] + $GLOBALS[“b”]; } echo sum_test_1( ); echo sum_test_2( ); 範例8-8, 8-9 ?> sum_test_1( ) 與 sum_test_2( ) 的執行結果均為 3。
變數影響範圍-全域變數 <? Function MyFunction() { global $A,$B ; $A=$A+10; $B=$B+10; } ?> <html> <title>全域變數</title> <body> <?php $A=1 ; $B=2 ; echo "呼叫函數前 :<br>" ; echo "A = $A <br>" ; echo "B = $B <hr width=200 align=left>" ; MyFunction() ; echo "呼叫函數後 :<br>" ; echo "B = $B <p>" ; </body> </html>
變數影響範圍-全域變數 <? Function MyFunction() { $GLOBALS["C"]=$GLOBALS["A"]+$GLOBALS["B"] ; } ?> <html> <title>GLOBALS陣列</title> <body> $A=1 ; $B=2 ; $C=0 ; MyFunction() ; echo "\$A=$A , \$B=$B , \$C=$C" ; </body> </html>
靜態變數 變數的值通常在函數執行完畢後就消失 如果要將變數內容在函數執行完畢後仍然可以保留,可以將變數需告成靜態變數。 Static $a; 只能夠使用在函數中 範例8-10, 8-11 有靜態變數,是否可以預見有動態變數?
靜態變數 <? Function addone() { $I=0 ; $I=$I+1 ; echo "\$I = $I<br>" ; } ?> <html> <title>區段變數生命週期</title> <body> addone() ; </body> </html>
動態(參照)變數 讓變數內容再變成另外一個新的變數 $name=“John”; $$name=“Lee”; 相當於 $John=“Lee”; 注意大括弧{ }與雙引號” ”的使用,尤其是動態變數陣列
以變數為名的變數(Variable Variables) 在 PHP 中,變數的名稱也可以是變數,例如: <? $a = "hello"; $$a = "world"; echo $a . " " . $$a; // 輸出結果:hello world echo $a . " " . ${$a}; // 輸出結果:hello world echo $a . " " . $hello; // 輸出結果:hello world ?>
以變數為名的變數(Variable Variables) <html> <title>動態變數寫法</title> <body> <? $name="John" ; $$name="Lee" ; echo "1. $$name <br>" ; echo "2. ${$name} <br>" ; echo "3. ".$$name."<br>" ; echo "4. ".${$name} ; ?> </body> </html>
預設變數 內定預設變數 在 PHP 執行時,有部份預設的變數可用,您可以執行 phpinfo( ) 以查看這些變數。例如: SERVER_NAME:chensh.loxa.edu.tw HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322) SCRIPT_FILENAME:/home/chensh/php/A_4.php 取用方式 $_SERVER[‘SERVER_NAME’] 或 & SERVER_NAME(與php.ini的register_globals設定有關)
預設變數 <? echo "目前執行的檔案名稱 ". $_SERVER['PHP_SELF']. "<br>"; echo "伺服器使用的軟體 ". $_SERVER['SERVER_SOFTWARE']. "<br>"; echo "文件的根目錄 ". $_SERVER['DOCUMENT_ROOT']. "<br>"; echo "使用者相關資訊 ". $_SERVER['HTTP_USER_AGENT']. "<br>"; echo "遠端使用者的位址 ". $_SERVER['REMOTE_ADDR']. "<br>"; echo "遠端使用者的連線埠 ". $_SERVER['REMOTE_PORT']. "<br>"; ?>
預設/外部變數 如果 php.ini 中 register_globals 被設定為 on 的話,上述的變數直接在前頭加上 $ 符號即可使用,例如:$SERVER_NAME。 倘若 register_globals 被設定為 off(預設值)的話,上述變數的讀取方法就不一樣了,它們被當作是 $_SERVER 陣列的一個元素,請用 $_SERVER[‘變數名稱’] 的方式來讀取它,例如:$_SERVER[‘SERVER_NAME’]。 http://php.benscom.com/manual/hk/language.variables.predefined.php PHP4後預設為OFF狀態
讀取外部變數 與php.ini 中的 register_globals 參數設定有關 使用全域變數陣列加以讀取 $GLOBALS, $_SERVER, $_GET, $_POST $_COOKIE, $_FILES, $_ENV, $_REQUEST $_SESSION 當register_globals=off時 (Simple1.html & simple1.php,p.2-21)
變數型態轉換 設定變數值時直接設定轉換型態 變數 = (資料型態) 運算式或變數; gettype(變數名); 取得變數資料型態 使用settype()函數強行轉換型態 Settype (變數, 新資料型態); Var_dump(); 取得變數資料型態與內容
變數型態轉換 <html> <title>資料型態的轉換</title> <body> <? $A=12.345 ; settype($A,integer) ; var_dump($A); $B=100 ; settype($B,string) ; var_dump($B); $B=$B."abc"; echo "\$A = $A Type is ".gettype($A)."<br>" ; echo "\$B = $B Type is ".gettype($B)."<br>" ; ?> </body> </html>