You are on page 1of 66

PHP

Copyright, 1997 © Dale Carnegie & Associates, Inc.


PHP 入門篇

Copyright, 1997 © Dale Carnegie & Associates, Inc.


環境安裝

• AMP 整合套件
– XAMPP 1.6.7

• 開發工具
– EmEditor
– PSPad
– Dev-PHP
– PHP Designer 2007
Hello
<html>
<head>
<title>First program</title>
</head>
<body>
<?php echo “Hello ! ";?>
</body>
</html>
程式的執行

• 程式的跑法 由上往下 ( 循序執行 )


• 遇到特殊控制才能回頭
• 程式停止的方式
– 跑完結束
– 錯誤中止
– 指令結束
程式註解

<?php
// 單行註解,同  C++ 語法

  /* 多行註解,
本例採用行的註解方式  
*/
?>
常數與變數

• 常數 圓周率 ..
• 變數 $x , $y , $z..
常數型態

• 整數字 (Integer Literals) 如: 1234


• 浮點數字 (Floating-point Literals) 如: 1.234
• 字串字 (String Literals) 如: “ 1234

• 布林值 (Boolean Literals) 如: true / false
預設常數
• PHP 本身提供了許多預設常數供設計者使用
例如 :
PHP_VERSION 和 PHP_OS 分別表示 PHP 的版本與
PHP 目前執行的作業平台

• 一經程式定義後不會因為程式的執行而改變其內容 ( 值 ), 這
種形式的資料,我們稱之為常數。
 預設常數
 自定常數
1: <html> 第 5 行
2: <title>PHP 預設常數 </title> PHP_VERSION 是
3: <body> PHP 的預設常數代表
4: <?php PHP 的版本。如圖 程
5: echo "PHP 的版本是 " . PHP_VERSION . "<P>" ; 式執行後會顯示你所使
6: echo " 目前工作平台的作業系統是 ". PHP_OS 用的 PHP 版本編號。
7: ?> 第 6 行顯示目前工作
8: </body> 平台的作業系統 .
9: </html>

上面瀏覽器連接到 Windows
2000, 而下面瀏覽器是連接到
Linux Server 。在不同伺服器
上執行 PHP_OS 的內容都不
同。 另外 , 讀者是否有注意
到預設常數的名稱前面並沒
有加上 "$", 而且常數名稱也
一定要大寫才可以 , 如果寫
成小寫就不是預設成數了 ,
讀者請勿混淆。
自定常數

• 程式設計者要自行定義常數時,可使用
define() 函數。
• define() 的格式如下:
define ( 常數名稱 , 常數值 , [case_insensitive])
第一個參數是設定常數的名稱 ,
第二個參數是設定常數的內容 ,
第三個參數是一個是否視大小寫為相同的選項 .
1: <?php
2: define (HELLO_MSG,"Good morning") ;
3: ?>
4: <html>
5: <title> 自定常數 </title>
6: <body>
7: <?php
8: echo "Hi, ". HELLO_MSG ."<p>" ;
9: echo hello_msg . " everyone" ;
10: ?>
11: </body>
12: </html>

在第 1-3 行 define() 函數中 , HELLO_MSG 被定義成為一個常數 , 內容為


文字串 "Good morning" 。 第 8 行 echo 字串中 HELLO_MSG 是一個常
數 , 所以會被定義的文字串所取代。第 9 行 echo 字串中小寫的
hello_msg 並不會被解析為一個常數 , 所以並不會被第 2 行所定義的文字串
所取代。

範例 中 define() 函數第三個參數並沒有設定 , 由此可知 define() 的預設值


是將大小寫視為不同的常數 .
1: <?php
2: define (HELLO_MSG,"Good morning",1) ;
3: ?>
4: <html>
5: <title> 自定常數 </title>
6: <body>
7: <?php
8: echo "Hi, ". HELLO_MSG ."<p>" ;
9: echo hello_msg . " everyone <p>" ;
10: echo " 我的 PHP 是 " . PHP_VERSION ." 版 ";
11: ?>
12: </body>
13: </html>

第 2 行定義常數的時第三個選項設定為 1, 這個意思表示常數的名稱不分
大小寫。也就是說 , HELLO_MSG 和 hello_msg 都會被看成是同一個定義
過的常數。所以第 8-9 行兩個 echo 都可以正確地顯示出我們所想要顯示
的訊息。第 10 行 PHP_VERSION 並沒有設定在第 1-3 行中 , 為什麼沒
有產生錯誤 ? 因為 PHP_VERSION 是 PHP 的預設常數 , 所以不需要定
義就可以使用 .
變數的規則
– 變數以 ‘ $’ 開頭
– 變數不用宣告型別
但可用 cast 或者 settype() 明確的設定
– 變數的型別
整數、浮點數、字串、陣列和物件﹍等 ( 詳見
下一頁 )
– 物件用 new 來產生
– 英文字母大小寫會被視為不同
$A 和 $a 是兩個不同的變數
( 變數 ) 資料型態
名稱 型態 範例
Boolean 布林型態 $a=True;

Integer 整數型態 $a= 10 ;

Float 浮點數型態 $a= 1.2345 ;

String 字串型態 $a= “Hello !!” ;

Array 陣列型態 $a[0]=20 ;

Object 物件型態 $a= new ObjectClass ;

Resource 外部資源型態 $a=mysql_connect() ;

NULL Null 型態 $A=NULL ;


預設變數
PHP.INI 中一個參數 register_globals , 它是設定
環境變數 , GET 變數 , PUT 變數 , Cookie 變數
以及伺服器變數是否為全域變數 .
 若 register globals 設定為 on 就表示各變數均為全域
變數 , 在程式中就可以直接使用 . 例如
echo $HTTP_USER_AGENT ;
 register globals 預設為 off, 不讓設計師直接使用這些
變數 . 如果要使用這些變數就必需藉由 $_ENV,
$_GET, $_POST, $_Cookie 和 $_SERVER 陣列 , 取得
變數內容 . 例如取得 HTTP_USER_AGENT 就必須藉
由 $_SERVER 陣列 .
echo $_SERVER[‘HTTP_USER_AGENT’]
部分 $_SERVER 陣列中內容

‘PHP_SELF’ 目前執行的檔案名稱
‘SERVER_NAME’ 伺服器的名稱
‘SERVER_SOFTWARE’ 伺服器使用的軟體
‘DOCUMENT_ROOT’ 文件的根目錄
‘HTTP_USER_AGENT’ 使用者相關資訊
‘REMOTE_ADDR’ 遠端使用者的位址
‘REMOTE_PORT’ 遠端使用者的連線埠
‘ PHP_AUTH_USER’
‘PHP_AUTH_PW’

在取得變數內容時 , 以變數名稱為陣列指標即可取得資訊 . 例如
SERVER_NAME 則可以以 $_SERVER[‘SERVER_NAME’] 取得資訊
.
使用 PHP 預設變 數
1: <?php
2: echo " 目前執行的檔案名稱 ". $_SERVER['PHP_SELF']. "<br>";
3: echo " 伺服器使用的軟體 ". $_SERVER['SERVER_SOFTWARE']. "<br>";
4: echo " 文件的根目錄 ". $_SERVER['DOCUMENT_ROOT']. "<br>";
5: echo " 使用者相關資訊 ". $_SERVER['HTTP_USER_AGENT']. "<br>";
6: echo " 遠端使用者的位址 ". $_SERVER['REMOTE_ADDR']. "<br>";
7: echo " 遠端使用者的連線埠 ". $_SERVER['REMOTE_PORT']. "<br>";
8: ?>
變數的使用
• $mystring = " 我是字串 ";
$WilsonPeng = " 真是認真的作者 ";
$NewLine = " 換行了 \n";
• $int1 = 38;
$int2 = 49;
$hexint = 0x10;
• $float1 = 1.732;
$float2 = 1.4E+2;
• $MyArray1 = array(" 子 ", " 丑 ", " 寅 ", " 卯 ");
$MyArray2 = array(
" 地支 " => array(" 子 ", " 丑 ", " 寅 ", " 卯 "),
" 生肖 " => array(" 鼠 ", " 牛 ", " 虎 ", " 兔 "),
" 數字 " => array(1, 2, 3, 4)
);
資源型態 (Resource)

• 資源型態是一種特殊的資料型態 , 不同於之前的資料型態 ,
資源型態變數是負責維持與外部資源的聯繫 .
– 例如開啟的一個檔案 , 資料庫連線 , PDF, 影像等等

• 資源型態變數不可以直接操作 , 如果需要操作資源型態變數
則必須藉由特殊的函數才可以操作 .

• 例:
MySql 對 PHP 來說是一個外部資源 , 因此當 PHP 需要操作
資料庫時就必須藉由 PHP 中的 MySql 函數來操作 .
$m=mysql_connect(‘localhost’,’root’,’1234’);
NULL 型態
• NULL 也是一個比較特殊的型態 . 一個變數如果被設定成
NULL 就表示這個變數裡沒有任何的值 .
• 有三種情形會被認定變數的值為 NULL
$n1=NULL;
unset($n2);
echo $n1;
echo $n2;
echo $n3;
$n1 直接設定為 NULL, 所以 $n1 為 NULL. unset() 函數會清除
變數的內容 , 所以 $n2 為 NULL. $n3 沒有任何的設定和預先的處
理 , 所以 $n3 的內容也為 NULL. 結論是上面的例子中 3 行 echo
都不會有任何的輸出 .
運算符號

• 算術運算
• 字串運算
• 指定運算
• 邏輯運算
算術運算

符號 意義

+ 加法運算

- 減法運算

* 乘法運算

/ 除法運算

% 取餘數

++ 累加

-- 遞減
算術運算範例

• <?php
$a = 8;
$b = 2;
$c = 3;
echo $a+$b."<br>\n";
echo $a-$b."<br>\n";
echo $a*$b."<br>\n";
echo $a/$b."<br>\n";
echo $a%$c."<br>\n";
$a++;
echo $a."<br>\n";
$c--;
echo $c;
?>
字串運算

• 就是 .
• 善用「 .= 」 ( 幫幫忙,不是 =.=)
字串運算範例

<?php
$a = ‘ 清華大學讀書會,’ ;
$b = ‘ 歡迎各位加入!’ ;
echo $a.$b;

?>
輸出結果為 清華大學讀書會,歡迎各位加入!
指定運算

符號 意義

= 將右邊運算式所得的值指定給左邊變數 ( 記憶體位址 )

+= 將右邊的值加到左邊

-= 將右邊的值減到左邊

*= 將左邊的值乘以右邊

/= 將左邊的值除以右邊

%= 將左邊的值對右邊取餘數

.= 將右邊的字串連結到左邊
指定運算範例
<?php
$a = 5;
$a += 2; // 即  $a = $a + 2;
echo $a."<br>\n";
$b = " 哇 ";
$b .= " 哈 "; // $b = " 哇哈 ";
$b .= " 哈 "; // $b = " 哇哈哈 ";
echo "$b<br>\n";
?>
邏輯運算

符號 意義
< 小於
> 大於
<= 小於或等於
>= 大於或等於
== 等於
!= 不等於
&& and 而且 (And)
|| or 或者 (Or)
xor 互斥 (Xor)
! 不 (Not)
邏輯運算範例
<?php
$a = 5;
if ($a != 5) {
echo ’$a 不是  5’;
} else {
echo ’$a 是  5’;
}
?>
讀取外部變數
•互動式網頁最大的特色就是和使用者溝通
, 最重要的問題就是如何取得使用者的輸
入的資訊。
•讀取使用者輸入的資訊只是 PHP 由外部
輸入變數的其中一種功能而已。
•除了取得使用者資訊外 , 伺服器資訊、
Cookie 、 Session 等等對 PHP 來說都是
屬於外部變數或是全域變數。
全域變數陣列
陣列名稱 說明

$GLOBALS 目前程式碼範圍中有效的變數。
$_SERVER 和伺服器有關的變數 ,
$_GET 利用 HTTP GET 方式傳回的變數
$_POST 利用 HTTP POST 方式傳回的變數
$_COOKIE 利用 HTTP COOKIE 方式傳回的變數。請參閱第 18

$_FILES 上傳檔案時的變數
$_ENV 環境變數。請參閱 phpinfo() 中 PHP Variables
$_REQUEST 讀取任何一種使用者輸入方式的變數
$_SESSION 讀取已註冊的 SESSION 變數 。請參閱第 18 章
互動式的網頁製作

•由使用者端輸入所需的資訊
• HTML 表單輸入
• PHP 的 $_GET 及 $_POST 陣列
<html>
<title> 表單輸入 </title>
<body>
<b> 凱文瑞克公司線上訂購系統 <p></b> 輸入公司名稱、電話號
======= 客戶資料 =======<p> 碼和訂購數量。
<form action="extra.php" method="get">
公司名稱 <INPUT TYPE=TEXT NAME=company SIZE=20><p>
公司地址 <INPUT TYPE=TEXT NAME=address SIZE=20><p>
訂購產品數量 <INPUT TYPE=TEXT NAME=amount SIZE=5><p>
<INPUT TYPE=SUBMIT value=" 填好了 ">
<INPUT TYPE=RESET VALUE=" 重填 ";
</form>
</body>
</html>

在輸入完畢後三個資料分別以
company 、 address 和 amount 三個名稱
傳回伺服器中給表單所指定的 PHP 程

1: <html>
2: <title> 取得外部變數 </title>
3: <body> 取得外 部傳回的變 數值
4: <?php
5: echo $_GET['company'] ." 您好 : <p>" ;
6: echo " 感謝貴公司訂購本公司產品 ". $_GET['amount'] ." 個 ," ;
7: echo " 貨款共 ".($_GET['amount']*100)." 元整 .<p>" ;
8: echo " 貨品將於三日內送達 $_GET['address']<p>" ;
9: echo " 再次感謝您的愛護 .<p>" ;
10: echo " 凱文瑞克公司 敬上 " ;
11: ?>
12: </body>
13: </html>

由執行結果可以看到三個變數
我們並沒有設定其初始值 , 而
其內容是由 HTML 表單所傳
回來的資料存入。當然在
PHP 程式中變數的名稱必需
和 HTML 表單中的名稱相同。
確認網頁中顯示公司的名稱、
公司的地址以及訂購的數量 ,
並依訂購的數量計算出應付的
貨款。
1: <html>
2: <title>Text</title>
3: <body>
4: <form action="8-24.php" method=get>
5: <input type=text name=str1><p>
6: <input type=text name=str2 size=30><p>
7: <input type=text name=str3 size=50 value="Hello my friend"><p>
8: <input type=submit value=" OK ">
9: <input type=reset value="Reset">
10: </form>
11: </body>
12: </html>

輸入 3 個文字串 , 分別是
str1 、 str2 和 str3 。其中分別
設定 size 和 value 屬性。 表
單以 GET 的方式傳送給 8-
24.php 。
範例 8- 24
1: <?php 接收 8-23.htm 傳來的資料。
2: echo "str1 = ".$_GET['str1']." <br>"; 因為是採用 GET 的方式所以
3: echo "str2 = ".$_GET['str2']." <br>"; 要用 $_GET['str1'] 取得 外部
4: echo "str3 = ".$_GET['str3']." <br>"; 變數 $str1 的內容。同樣的
5: ?> Password 也可以讀的到。

1: <html>
2: <title>Text</title>
3: <body>
4: <form action="8-24.php" method=get>
5: <input type=text name=str1><p>
6: <input type=text name=str2 size=30><p>
7: <input type=text name=str3 size=50 value="Hello my friend"><p>
8: <input type=submit value=" OK ">
9: <input type=reset value="Reset">
10: </form>
11: </body>
12: </html>
1: <html>
2: <title>Radio</title> 8-25.htm
3: <body>
4: <form action=8-26.php method=get>
5: <input type=radio name=r1 value=1> 選項 A <br>
6: <input type=radio name=r1 value=2> 選項 B <br>
7: <input type=radio name=r1 value=3> 選項 C <br>
8: <p>
9: <input type=radio name=r2 value=1> 選項 X <br>
10: <input type=radio name=r2 value=2> 選項 Y <br>
11: <p>
12: <input type=radio name=r3 value=1 checked> 選項 O <br>
13: <input type=radio name=r3 value=2> 選項 P <br>
14: <input type=radio name=r3 value=3> 選項 Q <br>
15: <input type=submit value=" OK ">
16: <input type=reset value=" Reset ">
17: </form>
18: </body>
19: </html>

Radio 為單選 , 所以同一個群組 ( 例如第 5-7 行 ) 不管有幾個 Radio 選項


, 它的名稱 (Name) 都必須相同。如果不同代表相異群組。當然同一群組只
會傳一個值回去。
範例 8- 26
1: <?php
2: echo "r1 = ".$_GET['r1']." <p>";
3: echo "r2 = ".$_GET['r2']." <p>";
4: echo "r3 = ".$_GET['r3']." <p>";
5: ?>

接收 8-25.htm 傳來的資料。因為是採用 GET 的方式所以要用


$_GET['r1'] 取得 外部變數 $r1 的內容。每一組只有一個回傳值。
範例 8- 27
1: <html>
2: <title>Check</title>
3: <body>
4: <form action=8-28.php method=get>
5: <input type=checkbox name=c1 value=1> 選項 A<p>
6: <input type=checkbox name=c2 value=2> 選項 B<p>
7: <input type=checkbox name=c3> 選項 C<p>
8: <input type=checkbox name=c4 checked> 選項 D<p>
9: <input type=submit value=" OK ">
10: <input type=reset value=" Reset ">
11: </form>
12: </body>
13: </html>

Checkbox 為複選 , 恰巧與 Radio 相反。所以一個 Check 選項 , 它都必


須擁有不相同的名稱 (Name) 。當然一個 Checkbox 都會傳一個值回去

範例 8- 28
1: <?php 接收 8-27.htm 傳來的資料。
2: echo "AAA ==> ".$_GET['c1']." <p>"; 因為是採用 GET 的方式所
3: echo "BBB ==> ".$_GET['c2']." <p>"; 以要用 $_GET['c1'] 取得 外
4: echo "CCC ==> ".$_GET['c3']." <p>"; 部變數 $c1 的內容。每一個
5: echo "DDD ==> ".$_GET['c4']." <p>"; 選項就有一個回傳值。
6: echo "<hr>";
7: ?>

以上範例是採用 method=get
所以我們都採用 $_GET[] 陣列
來取得變數值。如果
meth0d=post 請記得要用
$_POST[] 陣列來取得變數值。
PHP 的控制指令
• php 沒有 goto 、不使用 main()
 因為只要碰到 <?php ?> 就跑囉…

• If…else 判斷
• switch 判斷
• for 迴圈
• foreach 迴圈 ( 僅對「陣列」 )
• while 迴圈
• break & continue 中斷
• exit & die 結束
if..else 判斷的語法
– if (expr) { statements }
• expr  判斷式,例如 “ $a<=1”
• statements  該執行的程式
• 若程式只有一行,可以省略大括弧 {}

– if (expr) { statements1 }
else{ statements2 }

– if (expr) { statements1 }
elseif { statements2 }
elseif { statements3 }

else { statements_other }
if..else 判斷的範例
<?php
$a = 9;
$b = 5;
if ($a > $b){
echo "a 比  b 大 ";
}elseif ($a == $b) {
echo "a 等於  b";
}else{
echo "a 比  b 小 ";
}
?>
switch 判斷的語法
switch (expr) {
case expr1: statement1; break;
case expr2: statement2; break;
default: statementN;
}
注意條件出現的優先性
switch 判斷的範例
<?php
switch (date("D")) {
case "Mon":
echo " 今天星期一,猴子穿新衣 ";
break;
case "Tue":
echo " 今天星期二,猴子肚子餓 ";
break;
case "Wed":
echo " 今天星期三,猴子去爬山 ";
break;
case "Thu":
echo " 今天星期四,猴子看電視 ";
break;
case "Fri":
echo " 今天星期五,猴子去跳舞 ";
break;
default:
echo " 今天放假,不管猴子了 ";
}
?>
If vs switch
<?php <?php
switch (date("D")) { if(date("D")==“Mon”)
case "Mon":
echo " 今天星期一,猴子穿新衣 "; echo " 今天星期一,猴子穿新衣 ";
break;
case "Tue": elseif(if(date("D")==“Tue”)
echo " 今天星期二,猴子肚子餓 "; echo " 今天星期二,猴子肚子餓 ";
break; elseif(if(date("D")==“Wed”)
case "Wed":
echo " 今天星期三,猴子去爬山 "; echo " 今天星期三,猴子去爬山 ";
break; elseif(if(date("D")==“Thu”)
case "Thu":
echo " 今天星期四,猴子看電視 "; echo " 今天星期四,猴子看電視 ";
break; elseif(if(date("D")==“Fri”)
case "Fri":
echo " 今天星期五,猴子去跳舞 "; echo " 今天星期五,猴子去跳舞 ";
break; else
default: echo " 今天放假,不管猴子了 ";
echo " 今天放假,不管猴子了 ";
} ?>
?>
for 迴圈的語法
for (expr1; expr2; expr3) { statements };
expr1  設定初始條件之用
expr2  設定繼續 ( 終止 ) 的條件
expr3  statement 執行完畢後,用來改變條件

以供下次的迴圈判斷 (expr2)
statements  迴圈內需執行的程式片段 ( 指令
群)
若程式只有一行,可以省略大括弧 {}
0001 <?php
0002 echo "<pre>";
0003 for($i=1;$i<=9;$i++){
0004 for($j=1;$j<=9;$j++){
0005 $k=$i*$j;
0006 printf("%dX%d=%2d ",$j,$i,$k);
0007 }
0008 echo "<br>";
0009 }
0010 echo "</pre>";
0011 ?>

第 2 行 表示輸出至瀏覽器的結果,保留其格式。第 3 行為第一個迴圈 ( 外迴圈 )


會執行 9 次 ( 從 1 、 2… 到 9) 。第 4 行為第二個迴圈 ( 內迴圈 ) ,分別執行計算兩
數相乘 ( 第 5 行 ) 、輸出這兩個數字及其乘積 ( 第 6 行 ) 。第 8 行輸出「斷行」

1: <html>
2: <title> 統計表 </title>
3: <body>
4: <?php
5: $s = array (0,15,10,20,17,3,8) ;
6: echo " 銷售量統計表 <p>" ;
7: for ($A=1 ; $A<=6; $A++){
8: echo " 星期 $A : " ;
9: $s[0]+=$s[$A] ;
10: for ($I=1 ; $I<= $s[$A]; $I++)
11: echo "*" ; • $s[0] 用來計算並儲存一週的總銷售
12: echo " $s[$A]<br>" ; 量
13: } • $s[1] 到 $s[6] 則分別儲存星期一到
14: echo "<p> 總量 : $s[0]" ; 星 期六的銷售量。
15: ?>
16: </body>
17: </html>
foreach 迴圈

• foreach 專門使用在陣列的操作。
• 二種格式分述如下:
1) foreach (array_expression as $value)
2) foreach (array_expression as $key => $value)
1) foreach (array_expression as $value)
• 格式
foreach ( 陣列名稱 as $value){
迴圈敘述 ;
}
• 在執行時陣列的 index 先歸零 , 意即
index 指向陣列第 0 個元素 ( 因為陣列從
0 開始 ), 然後每次迴圈依序將陣列元素的
內容放入 $value 變數中 , 直到陣列中每
一個元素都執行一次。
1: <html>
2: <title>foreach</title>
3: <body>
4: 月份縮寫 : <br>
5: <?php
6: $month = array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug',
7: 'Sep','Oct','Nov','Dec') ;
8: foreach ($month as $value)
9: echo "$value <br> " ;
10: ?>
11: </body>
12: </html>

第 6-7 行設定陣列 $month 的內容。 第 8 行


foreach 會先將 index 歸零 , 然後依陣列內容
‘ Jan’,‘Feb’... 之順序 , 依序代入 $value 中。第
9 行顯示 $value 內容。陣列有 12 個元素 , 所以
迴圈會執行 12 次。
2) foreach (array_expression as $key => $value)

• 格式
foreach ( 陣列名稱 as $key => $value) {
迴圈敘述 ;
}
• 第二種方式除了會將陣列元素依序存入
$value 外 , 也會將陣列指標 index 同時存
入 $key 中。
1: <html>
2: <title>foreach</title>
3: <body>
4: <?php
5: $A = array (0,10,20,30,40,50,60) ;
6: foreach ($A as $key => $value){
7: echo "\$A[$key] : " ;
8: echo "$value <br> " ;
9: }
10: ?>
11: </body>
12: </html>

第 5 行設定陣列 $A 的內容。 第 6 行將陣列 $A 中元素依序取出。陣


列元素的 index 值放入 $Key, 元素的內容放到 $value 中。第 7 行顯示
$Key ( 即 index) 。第 8 行顯示 $value 。
while 迴圈的語法
while (expr) { statements }
先檢查再決定是否執行 statements
每次迴圈前 若 expr 的條件成立,就進入
statements 的部分
statements 的部分,可能一次都不會被執行

do { statements } while (expr);


先執行 statements 再檢查是否重複執行
每次迴圈執行之後 若 expr 的條件成立,才進
入下一輪的 statements 部分
statements 的部分,至少會被執行一次
1: <html>
2: <title>while 迴圈 </title>
3: <body>
4: WHILE – 開始時判斷式為真 <br>
5: <?php
6: $A = 1;
7: while ($A<=10)
8: echo $A++."<br>" ;
9: ?>
10: <hr>WHILE – 開始時判斷式為假 <br>
11: <?php
12: $A=20 ;
13: while ($A<=10)
14: echo $A++."<br>" ;
15: ?>
16: </body>
17: </html>

第 6 行設定 $A=1 。第 7 行 while 因為 1<10 所以判斷式為真 , 就會進入迴圈敘


述內執行。第 8 行顯示 $A 的內容並且將 $A 的值加 1, 然後回到第 7 行在判斷
是否執行 while 迴圈。如此循環一直到 $A 的值遞增到 11, 使得判斷式為假就不
會再執行迴圈。此時畫面上已顯示 1 到 10 。接著第 10 行顯示出一條分隔線以及
提示字串。第 12 行設定 $A=20 。第 13 行因為 $A 的值為 20 不會小於或等於
10, 所以判斷式為假 , 迴圈敘述就不會被執行 , 畫面上自然不會顯示出任何結果。
這個範例執行結果可以看到當判斷式為真時 , 由 1 依序顯示到 10 。當判斷式為
假時就沒有顯示任何東西。
1: <html>
2: <title>do_while 迴圈 </title>
3: <body>
4: Do-WHILE – 當判斷式為真 <br>
5: <?php
6: $A = 1;
7: do {
8: echo $A++."<br>" ;
9: } while ($A<=10) ;
10: ?>
11: <hr>Do-WHILE – 當判斷式為假 <br>
12: <?php
13: $A=20 ;
14: do {
15: echo $A++."<br>";
16: }while ($A<=10)
17: ?>
18: </body>
19: </html>

第一個 do_while 迴圈第 7 行只是表示迴圈的開始並沒有判斷 , 程式會直接進入第


8 行顯示 $A 的內容並且將其值加 1 。第 9 行 while 判斷 $A 是否小於或等於
10 。迴圈會一直執行到判斷式為假為止。第 13 行第二個迴圈 $A 的值為 20 。第
14 行表示迴圈開始並沒有判斷 , 進入第 15 行顯示 $A 的值 ( 即 20) 然後加 1 。
第 16 行進行判斷式的檢查 , 發現判斷式為假 , 所以立即離開迴圈向下執行。此時
畫面上已顯示一個 20 。
break
• break 指令會強迫跳離 for 、 while 迴圈及
switch 指令。
• 格式如下:
break n ;
• brea k 的用法相當簡單 , 只要將 break 指令
寫在要強迫跳離迴圈的地方就可以了。參
數 n 表示跳離迴圈的深度。
continue
• continue 指令會忽略 continue 以下的迴圈
敘述回到迴圈起始位置繼續執行迴圈。
• 格式
continue n ;
• continue 指令會忽略所在位置以下的迴圈
敘述回到迴圈起始位置繼續執行迴圈。 n
代表跳離的層數 , 當 n 忽略不寫時表示
n=1 。
函式的定義

function myfunc($a, $b)


{
// 執行一些動作
return $c; // 傳回 $c 之值

}
函式的使用
<?php
function add2num($a, $b)
{
return $a+$b;
}

echo add2num(3, 4);

?>
PHP 內建函式
• http://linux.tnc.edu.tw/techdoc/php/php_big5/funcref.html
PHP 手冊

• http://www.php5.idv.tw/modules.php?mod=books&act=index&cid=2
PHP5 網管實驗室

1. 建議先從下列幾個函式庫先看
 Array 陣列函式庫
 Date 日期與時間函式庫
 MySQL 函式庫
 Strings 字串函式庫

2. 並不是所有的函式庫裝好之後就有支援,可以查看 phpinfo()

3.MySQL 函式庫在往後的內容會有介紹

4. 往後的內容會介紹如何安裝支援其他函式庫
網頁之間 ( 網址 ) 傳值的原理

• test.php?font=5&color=red
– ?  掛入變數串
– Font 、 color  變數
– 5 、 red  變數的值
– & 串起變數
網址傳值原理
• 觀摩網址傳值
• 先寫 HTML
• 改寫成 PHP
• 測試
– 用 web server 唷 !
PHP 程式練習
(1) 假設學生成績的分數與等級的關係為:

  80 分以上 A
  70 ~ 79 分 B
  60 ~ 69 分 C
  50 ~ 59 分 D
  49 分以下 F

  寫一程式來輸入分數,並轉換成等級印出。

(2) 設計一程式,輸入 M,N 兩數,若和為 5 則印出 5 ,否則印出 NOT 5 。

(3) 印出 1 到 100 間可被 7 整除的正整數及個數。

(4) 請寫一程式印出 1 到 100 間的所有質數 :

(5) 自然界中的神奇數列 (Fibnacci sequence) 為 1 1 2 3 5 8 13 ... ,


請設 計一 程式列印前 20 個數目。

You might also like