講師:張凱迪(KD.Chang)
Copyright © 2014 All rights reserved
Web 101
Setup Environment
Hello PHP
Variable & Type & Operator
Cross Platform 跨平台
Cross Browser 跨瀏覽器
Modern Standard & Tools 新的開發標準和工具
Static Web 靜態網站
(Client Side Code : HTML / CSS / JavaScript)
Dynamic Web 動態網站 - 不是用 FLASH 就是動態!
(Server Side Code : PHP, Python, RoR, Node.js, JSP)
Apache HTTP server
PHP run on it !
Cross Platform (Windows / Linux / Mac)
Open Source
Open-source relational database (關聯式資料庫)
The world's second most widely used
Cross Platform (Windows / Linux / Mac)
Easy to use (phpMyAdmin)
Open Source
PHP:Hypertext Preprocessor
Server-side scripting language
Syntax like C & Perl
Can embed into HTML
Open Source
Windows (WAMP)
Linux (LAMP)
Mac (MAMP)
http://localhost:( your port num) or http://127.0.0.1:port
<?php
// save a hello.php file
echo "Hello PHP!";
?>
PHP 的程式都只會作用在 <?php ... ?> 之中
<!-- rock_php.php -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Second PHP</title>
</head>
<body>
<?php $color='red'; ?>
<h1>PHP is Rock</h1>
<h1 style="color:<?php echo $color;?>">PHP is Rock</h1>
</body>
</html>
<?php
echo "Semi-colon";
// ; 為一程式程式敘述結束
?>
PHP 使用分號(;)當做一段程式敘述的結束,告訴直譯器一段程式已完成
<?php
// comment cannot execute 註解不會執行,為對所寫程式的說明
/*
multi-line comment
multi-line comment 我是多行註解
*/
?>
http://self-paced-images.webucator.com/
含 PHP 程式碼的網頁 -> 支援 PHP 的伺服器 -> 純 HTML 網頁
PHP 程式碼必須存在伺服器,使用 phpinfo() 觀察伺服器是否有安裝 PHP並顯示 PHP 相關資訊
<?php
phpinfo();
?>
PHP 中 echo() 和 print() 不是真正的函數,它是語言建構子(Language Construct),所以可以加括號亦可以不加。兩者最大差別為 echo 可以透過 , 來顯示數個變數
<?php
$quote_1 = '十年';
$quote_2 = '磨一劍';
echo('十年磨一劍');
echo '十年磨一劍';
print('十年磨一劍');
print '十年磨一劍';
echo $quote, $quote;
?>
1. 使用純HTML伺服器只能提供靜態內容(只有當網頁設計師更新網頁內容才會更新),若是使用PHP,則伺服器也可以結合資料庫(新增、擷取、更新、刪除資料)動態產生HTML網頁。事實上,當伺服器執行 PHP 程式碼時,最後產生的結果總是純 HTML / CSS,因此,一旦在伺服器執行完畢,每一篇 PHP 指令稿最後都會被轉換成 HTML / CSS
2. 良好的撰寫程式風格(程式碼多半包含在 <?php 與 ?> 中、注意空行、分號、註解),可以方便閱讀程式碼,檔名命名為 .php
將撰寫好的 hello.php 檔案存到伺服器的對應資料夾中(可能是www或/var/www,MAMP default Application/MAMP/htdocs可以自由設定對應資料夾)中並藉由瀏覽器打開:
http://locoalhost : (Apache port 號碼) / hello.php
若安裝成功將會出現成功畫面
color
red
<?php
$color = 'red';
$student_name = '王小仙';
?>
PHP 程式是由資料和指令所組成,資料則是指變數和資料型態。指令則是指運算子、流程控制和函數
變數可以視為一個儲存值的盒子,變數在程式執行的過程中扮演暫存的角色(存在記憶體中)
(1) 在 PHP 中,變數使用 $ 當做開頭
(2) 不建議使用 PHP 語法中已使用的關鍵字(Key words)命名
(3) 除了 $ 外變數至少需含一個字元
(4) $ 之後第一字元可以是英文字母或 _ ,後續字母可以是英文字母、_ 或是數字
(5) 空格以及 $ 與 _ 以外的特殊字元不可以使用
(6) 變數名稱習慣用小寫(PHP 將大小寫視為不同變數)
(7) 若有多個單字習慣用 _ 來分隔
(不用事先宣告型別)
不同於其他程式語言,PHP 不用事先宣告變數的型別,直接使用 等號(=)指定變數值即可,PHP 會依照變數儲存內容決定型別
<?php
$grades = 80;
$name = '另胡衝';
$go_or_not = true;
?>
變數在『變數範圍』(Variable Scope)內需唯一
除了將值指定給變數外,也可以將變數指定給變數,兩者僅事變數值相同,但到分配不同的記憶體,改動一變數不影響另一變數。若是在變數值前加上 & ,則表示傳送的是參考(記憶體位置),會彼此影響
<?php
$student_name = '洪八公';
$name = $student_name;
$student_name = '洪九公';
echo name;
$name = &$student_name;
$student_name = '洪九公';
echo $name;
?>
$student_name
$name
$student_name
$name
$name = &$student_name;
$name = $student_name;
PHP 動態變數是一種以變數來命名變數的方式,亦即變數名稱使用變數來命名,注意 echo 時只能用 {} 包起內層變數
<?php
$name = 'KD';
$$name = 'Lock';
$kd_name = $$name;
echo $kd_name;
$name = 'KD';
$$name = 'Lock';
echo ${$name};
?>
<?php
define('PI', 3.14);
echo PI;
echo '<br>';
$PI = 1;
echo $PI;
?>
有些時候一些常用值我們希望設成有意義的名稱,方便使用
1. 布林(boolean)
2. 整數(integer)
3. 浮點數(float或double)
4. 字串(string)
5. 陣列(array)
6. 物件(object)
7. 空值(NULL)
PHP 一般支援 8 種資料型態:
8. resource
boolean 值資料型態只有兩種:true 和 false (不區分大小寫)。常用於流程控制的判斷
<?php
$isHere = true;
$status = FALSE;
?>
整數指的是沒有小數的整數資料(整數包含0、正整數和負整數),整數範圍需視作業系統而定,一般 32 位元有符號整數(有表示正負號),範圍:2147483648-2147483647。以 0 開頭為八進位,0x開頭為十六進位(0-9、A-F)
<?php
$num = 1;
$eight = 03;
$sixteen = 0xA1;
?>
浮點數指的整數加上小數的資料(例如:3.14159),浮點數範圍需視作業系統而定,IEEE 格式是 64 位元,精確度可以達到 14 位小數點,亦可以用科學記號 e 或 E 表示以 10 為底的指數
<?php
$float_num = 1e.345;
$PI = 3.14
?>
字串由 0 或多個字元由單引號(')或雙引號(")所包含,其中跳脫字元為透過 \ 開頭的字串 ,來顯示鍵盤無法輸入的特殊字元(但要用 "" 括起才有用)
<?php
$poet_1 = '嘈嘈切切錯雜彈,大珠小珠落玉盤';
$poet_2 = "嘈嘈切切錯雜彈,大珠小珠落玉盤";
echo $poet_1;
echo $poet_2;
?>
補充資源:PHP的跳脫字元
陣列可視為一系列儲存值的箱子,為非常常見的一種資料結構,後面會有專門章節負責介紹。注意若要印出陣列內容需用 print_r() 函數
<?php
$new_array = array(1, 2);
print_r($new_array);
?>
物件為電腦科學描述事物的方式,可以類比成現實生活的事物,包含屬性和方法。物件導向的程式撰寫方式可以讓程式可以重複使用,更容易維護,在之後章節也會再特別介紹
NULL 的值只能是 NULL(不分大小寫),表示變數沒有值。變數值如果是 NULL,原因主要有以下三種:
1. 變數指定成 NULL
2. 變數尚未指定任何值
3. 變數使用 unset() 取消指定值
<?php
$null_or_not = NULL;
?>
資源資料型態的變數是一種特殊變數,其內容是外部資源參考。例如開啟檔案、連結資料庫、執行XML解析器
<?php
if(!file_exists("demo.txt")){
$file_ref = fopen("demo.txt", "w"); //打開檔案
echo get_resource_type($file_ref); // 輸出:stream
fclose($file_ref); //關閉文件
}
?>
PHP 運算式是由運算元(operands)和運算子(operator)所組成,共有算術、指定、位元、比較、邏輯等運算子。基本上運算子的優先順序為『由左到右,先乘除後加減』
補充資源:PHP 快速導覽 - 運算子
算術運算子(Arithmetic Operators)為常用的數學運算,運算元是整數或浮點數
<?php
$a = 13;
$b = 7;
echo -($a);
echo '<br>';
echo $a * $b;
echo '<br>';
echo $a / $b;
echo '<br>';
echo $a % $b;
echo '<br>';
echo $a + $b;
echo '<br>';
echo $a - $b;
?>
遞增遞減運算子(Increment/Decrement Operators)為可以置於變數前或後進行加減法運算的簡化寫法(若運算子在變數之前則變數立刻受影響,反之等運算式完才執行)
<?php
$a = 10;
$b = 12;
echo $a++;
echo ++$a;
echo $b--;
echo --$b;
?>
比較運算子(Comparision Operators)主要是用來比較兩運算元的布林值
1. ==
2. === (不只值相等,型態type也須相同)
3. !=
4. <> (不等於)
5. <
6. >
7. <=
8. >=
邏輯運算子(Logical Operators)可以連接多個比較運算式來建立複雜的條件運算式
1. ! (Not 運算,true變false,false變true)
2. && (And,連接兩個運算元皆為true,運算式才為true)
3. || (Or,連接兩個運算元,任何一個為true,運算式為true)
4. and (效果和&&相同,但&&優先順序較前)
5. or (效果和||相同,但||優先順序較前)
6. xor (連結兩個運算元,任一為true,結果為true。同為true或false,結果為false)
字串連接運算子 (.) 可以連接兩個字串成一字串
<?php
$first_name = 'KD';
$last_name = 'Chang';
echo $first_name . ' ' . $last_name;
?>
指定運算子除了之前使用 (=) 進行變數的賦值外,更可以透過組合運算式(Combined Operators),可以建立更簡潔的算術、比較或位元運算式
<?php
$x = 7;
$y = 13;
echo $x += $y; // 等於 $x = $x + $y;
echo $x .= $y; // 等於 $x = $x . $y;
echo $x -= $y; // 等於 $x = $x - $y;
echo $x /= $y; // 等於 $x = $x / $y;
echo $x %= $y; // 等於 $x = $x % $y;
?>
錯誤控制運算子(Error Control Operators),可以透過在函數或運算式前使用 @ 錯誤控制運算子來避免錯誤訊息顯示在網頁上。錯誤訊息顯示功能於 php.ini 設定檔中設定 track_errors,如果為 on,可以使用 $php_errormsg 印出錯誤訊息
<?php
$x = 13;
$y = 0;
echo @($x / $y);
echo '錯誤訊息:' . $php_errormsg;
?>
資料型別轉換主要是因為運算式中有不同的資料型別進行運算。一般在 PHP 中有自動型別轉換和強迫型別轉換兩種,以下先說明自動型別轉換:
<?php
// 整數 + 浮點數 ->浮點數
// 整數 + 整數字串 -> 字串轉成整數
// 浮點數 + 整數字串 -> 字串轉成浮點數
// 浮點數 + 浮點數字串 -> 字串轉成浮點數
echo 1 + 1.2;
echo 1 + '2';
echo 1.7 + '3';
echo 1.7 + '1.33';
?>
(型態名稱) 運算式或變數
<?php
// (int), (integer) 強迫轉成整數
// (real), (double), (float) 強迫轉成浮點數
// (string) 強迫轉成字串
// (array) 強迫轉成陣列
// (object) 強迫轉成物件
$x = 4;
$y = 3;
$z = (int) ($x / $y);
echo $z;
?>
PHP 預設會進行型別轉換,若轉換非自己預期的型別,可以透過強迫型別轉換進行轉換: