Ch07 PHP程式基礎 網頁程式設計
大綱 認識動態網頁技術 建立PHP、Apache、MySQL執行環境 撰寫第一個PHP程式 型別、變數、常數與運算子 流程控制 2018/9/17
認識動態網頁技術 Web 採用的是「主從式架構」(client-server module),如下圖,其中「用戶端」(client) 可以透過網路連線存取另一部電腦的資源或服務,而提供資源或服務的電腦就叫做「伺服器」(server)。 2018/9/17
瀏覽器端 Scripts 瀏覽器端 Scripts 指的是嵌入在 HTML 原始碼內的小程式,由瀏覽器負責執行。JavaScript 和 VBScript 均能用來撰寫瀏覽器端 Scripts,其中以 JavaScript 為主流。 下圖是 Web 伺服器處理瀏覽器端 Scripts 的過程: 2018/9/17
伺服器端 Scripts 伺服器端 Scripts 也是嵌入在 HTML 原始碼內的小程式,但和瀏覽器端 Scripts 不同的是它由 Web 伺服器負責執行。下圖是 Web 伺服器處理伺服器端 Scripts 的過程: 常見的伺服器端 Scripts 有下列幾種: CGI (Common Gateway Interface) JSP (Java Server Pages) ASP (Active Server Pages)/ASP.NET PHP (PHP:Hypertext Preprocessor) 2018/9/17
認識 PHP、Apache 與 MySQL PHP(Personal Home Page): PHP 官方網站http://www.php.net/ 查看PHP的發展現況、下載PHP 模組、PHP 文件或加入討論。 Apache :是 Apache HTTP Server 的簡稱,這是 Apache 軟體基金會所發展的 Web 伺服器,和 PHP 一樣屬於開放原始碼,具有完全免費、穩定、快速、安全、跨平台等優點。 MySQL:是由 MySQL AB 公司所發展的關聯式資料庫管理系統,它和 PHP、Apache 一樣屬於開放原始碼,但不同的是若純粹為個人用途,無須申請即可免費使用,若為商業用途,則須向MySQL AB 公司購買授權。MySQL官方網站http://www.mysql.com/ 查看MySQL的發展現況、下載免費的MySQL社群版。 2018/9/17
建立 PHP、Apache 與 MySQL 執行環境 下載XAMPP,同時安裝Apache, MySQL, Php 參考YouTube網路資料: 關鍵字: xampp教學 吳老師 安裝完畢後,網頁主目錄為 ??/xampp/htdocs/ 2018/9/17
撰寫第一個php程式 將 PHP 程式嵌入 HTML 網頁 <!doctype html> <html> <head> <meta charset="utf-8"> <title>first php page!!</title> </head> <body> <?php echo("hello"); phpinfo(); ?> </body> </html> 將檔案存在網頁的根目錄下,或是在根目錄下再新增一個子資料夾,再將檔案存到子資料夾下 利用瀏覽器下輸入網址: http://localhost/子資料夾/??.php 2018/9/17
撰寫第一個php程式 將 PHP 程式放在外部檔案 demo.inc <?php echo("hello"); phpinfo(); ?> index1.php <!doctype html> <html> <head> <meta charset="utf-8"> <title>first php page!!</title> </head> <body> <?php include_once("demo.inc"); ?> </body> </html> 2018/9/17
PHP 程式碼撰寫慣例 英文字母大小寫 空白字元 分號 註解 PHP 程式的每行敘述結尾要加上分號 (;),例如:echo(“hello”); 註解 PHP 提供了 // 和 # 兩種單行註解符號 PHP 亦提供了 /* */ 一種多行註解符號 2018/9/17
PHP 程式保留字 and or xor __FILE__ exception php_user_filter __LINE__ array () as break case cfunction class const continue declare default die () do echo () else elseif empty () enddeclare endfor endforeach endif endswitch endwhile eval () exit () extends for foreach function global if include () include_once () isset () list () new old_function print () require () require_once () return () static switch unset () use var while __FUNCTION__ __CLASS__ __METHOD__ 2018/9/17
資料型別 PHP 支援下列八種型別 純量型別 (scalar type) 整數 (integer) 特殊型別 (special type) 浮點數 (float、double) 布林 (boolean) 字串 (string) 特殊型別 (special type) NULL 資源 (resource) 複合型別 (compound type) 陣列 (array) 物件 (object) 物件 (object) 2018/9/17
整數 (integer) 整數 (integer) 是最簡單的型別,PHP 所支援的整數範圍取決於電腦平台的字組大小 (word size)。 PHP 接受十、八、十六進位整數,例如: echo(10 + 10); //十進位整數相加,會顯示十進位整數20 echo(010 + 010); //八進位整數相加,會顯示十進位整數16 echo(0x10 + 0x10); //十六進位整數相加,會顯示十進位整數32 echo PHP_INT_SIZE; //32-bit平台會顯示4,表示為4Bytes echo PHP_INT_MAX; //32-bit平台會顯示2147483647 2018/9/17
浮點數 (float、double) 浮點數 (float、double) 指的是實數,我們可以使用小數點或科學符號表示浮點數,例如: echo(-123.456); //會顯示 -123.456 (符號 - 表示負數) echo(+12.3); //會顯示12.3 (符號 + 或沒有符號表示正數) echo(0.123456789012345); //會顯示0.123456789012,多出的位數被四捨五入 echo(1.2345E+2); //會顯示123.45 echo(-123.45e-3); //會顯示 -0.12345 2018/9/17
布林 (boolean) 布林 (boolean) 只能表示 TRUE (真) 或 FALSE (偽) 兩種值 (沒有大小寫之分),當我們將非布林資料轉換成布林型別時,只有下列資料會轉換成FALSE: 整數 0 浮點數 0.0 空字串 "" 與字串 "0" 沒有元素的陣列 沒有成員的物件 特殊型別 NULL (包括尚未設定的變數) 2018/9/17
字串 (string) 字串 (string) 指的是由字母、數字、文字、符號所組成的單字、片語或句子: 單引號字串 (single quoted string): echo('生日快樂!'); //會顯示「生日快樂!」 (字串可以包含中文和全形標點符號) echo('C:\\Win'); //會顯示「C:\Win」 (\\ 為逸脫字元,會被解譯為 \) echo('I am \'Jean\'.'); //會顯示「I am 'Jean'.」 (\' 為逸脫字元,會被解譯為 ') 雙引號字串 (double quoted string) echo("I am \"Jean\"."); //會顯示「I am "Jean".」 (\" 為逸脫字元,會被解譯為 ") $str = "Mary"; //將變數str設定為字串 "Mary" (變數的名稱前面必須加上 $) echo("Hi, $str."); //會顯示「Hi, Mary.」 (變數str會被剖析為字串 "Mary") 2018/9/17
特別型別 NULL:凡型別為 NULL 的變數,就只有一種值-常數 NULL ,例如: $var = NULL; //將變數var的值設定為NULL 資源 (resource):資源 (resource) 型別代表的是一種特殊值,用來指向 PHP 程式的外部資源,例如: $my_resource = mysql_connect(); 2018/9/17
檢查型別 gettype(arg) is_integer(arg)、 is_int(arg)、is_long(arg) is_float(arg)、is_real(arg) is_bool(arg) is_string(arg) is_null(arg) is_resource(arg) is_array(arg) is_object(arg) is_numeric(arg) is_scalar(arg) 2018/9/17
轉換型別 使用轉型運算式將資料的型別轉換成指定的型別,例如: 使用settype(var, type) 函式設定型別,例如: echo (int)TRUE; //轉型運算式 (int) 將TRUE轉換成整數1,故顯示1 使用settype(var, type) 函式設定型別,例如: $var = TRUE; //將變數var設定為TRUE (布林型別) settype($var, “integer”); //呼叫settype() 函式將變數var的型別設定為integer echo $var; //TRUE轉換成integer型別會得到1,故顯示1 使用 intval(var)、floatval(var)、strval(var) 函式,例如: $var = TRUE; //將變數var設定為TRUE (布林型別) intval($var); //呼叫intval() 函式將變數var的型別轉換成integer echo $var; //TRUE轉換成integer型別會得到1,故顯示1 2018/9/17
變數命名 PHP 規定變數的前面必須加上錢字符號 ($),其命名規則如下: 第一個字元可以是英文字母或底線 (_),其它字元可以是英文字母、底線或阿拉伯數字,而且英文字母有大小寫之分。 保留字均無大小寫之分,但變數名稱和常數名稱則有大小寫之分 不能使用保留字、內建變數的名稱、內建函式的名稱、內建物件的名稱等。 避免在內部範圍使用與外部範圍相同的名稱,以免存取錯誤。 $My_Variable1 //合法的變數名稱 $_MyVariable2 //合法的變數名稱 $3MyVariable //非法的變數名稱,不能以數字開頭 $My@Variable4 //非法的變數名稱,不能包含@符號 2018/9/17
變數的存取方式 PHP 屬於動態型別程式語言,變數在使用之前無須宣告型別,同時可以在執行期間視實際情況動態轉換型別,我們通常使用等於符號 (=) 指派變數的值,例如: $myName = "小丸子"; //變數myName的型別為string 使用者自訂常數:我們可以使用 define() 函式建立常數,其語法如下: define(name, value[, case_insensitive]) define("PI", 3.14); define(“X”, 10 * 5); //定義名稱為X、值為50的常數,* 為乘法運算子 define(“Y”, X + 2); //定義名稱為Y、值為52的常數,+ 為加法運算子 2018/9/17
PHP內定常數 預先定義的常數 說明 __LINE__ 檔案的行數。 __FILE__ 檔案名稱與完整路徑。 __DIR__ 檔案所在的目錄。 __FUNCTION__ 函式名稱。 __CLASS__ 類別名稱。 __METHOD__ 方法名稱。 __NAMESPACE__ 命名空間名稱。 2018/9/17
算術運算子 運算子 語法 說明 範例 傳回値 + 運算元1 + 運算元2 運算元1加上運算元2 12 + 3 15 - 運算元1 - 運算元2 運算元1減去運算元2 12.8 – 5 7.8 * 運算元1 * 運算元2 運算元1乘以運算元2 8.1 * 3 24.3 / 運算元1 / 運算元2 運算元1除以運算元2 1 / 3 0.333333333 333 % 運算元1 % 運算元2 運算元1除以運算元2 的餘數 20 % 3 2 2018/9/17
字串運算子 PHP 提供的字串運算子為小數點 (.),其用途是連接字串,例如: $a = “PHP” . “5"; //將變數a的值設定為字串 "PHP5" $b = "PHP" . 5; //將變數b的值設定為字串 "PHP5” 2018/9/17
遞增/遞減運算子 遞增運算子 (++) 的語法如下 遞減運算子 (--) 的語法如下 2018/9/17
比較運算子 2018/9/17
位元運算子 2018/9/17
邏輯運算子 2018/9/17
指派運算子 2018/9/17
條件運算子 條件運算子 ?: 是一個三元運算子,其語法如下: 例如下面的敘述會得到 "YES": 2018/9/17
運算子的優先順序 2018/9/17
PHP的輸出函式 echo str1 [, str2 [, str3…]] print str echo '<i>Hello!</i><br>'; echo '生日', '快樂', '<br>'; echo '<a href="defualt.htm">回首頁</a>'; ?> print str print '<i>Hello!</i><br>'; var_dump(var1 [, var2 [, var3…]]) $a = 1.1; $b = TRUE; $c = 'Hello!'; var_dump($a, $b, $c); 2018/9/17
認識流程控制 判斷結構 (decision structures) 迴圈結構 (loop structures) if (if...、if...else...、if...elseif...) switch 迴圈結構 (loop structures) for foreach while do...while 2018/9/17
if:若...就... (單向選擇) if (condition) statement; 2018/9/17
if...else...:若...就...否則... (雙向選擇) if (condition) { statements1; } else statements2; 2018/9/17
if...elseif...:若...就...否則 if (condition1) { statements1; } elseif (condition2) statements2; elseif (condition3) statements3; ... else statementsN+1; 2018/9/17
2018/9/17
switch switch(expression) { case value1: statements1; break; case value2: statements2; … default: statementsN+1; } 2018/9/17
2018/9/17
for (計數迴圈) for (initializers; expression; iterators) { statements; [break;] } 2018/9/17
while while(condition) { statements; [break;] } 2018/9/17
do…while do { statements; [break;] }while(condition); 2018/9/17
break 2018/9/17