這篇教學是:
簡單的告訴你如何使用 PHP。
一些常用的函式和用途。
給瞭解 PHP 語法的初學者。
這篇教學不是:
教你如何使用 PHP 的語法。
教你如何實際的寫出範例。
告訴你 PHP 的細節。
資料型態的函式
doubleval() - 接受數值,傳回 double 的型態。
gettype() - 顯示資料的型態。
intval() - 接受數值,傳回 int 的型態。
var_dump() - 顯示變數的型態和它的資料。
settype() - 改變變數的型態。
範例:settype($undecided, string);
strval() - 接受數值,傳回 string 的型態。
PHP 的標準資料型態
integer | 5 | 整數 |
double | 3.234 | 浮點的數字 |
string | "hello" | 文字字串 |
boolean | true/false | 特殊的字串,true 跟 false |
object | | |
array | | 陣列 |
特殊的資料型態
Resource - 使用外來的資源 (資料庫)
NULL - 未定義的變數
轉換變數
跟 settype() 不同因為轉換 (casting) 會複製變數,但不會改變原來的變數。
程式碼:
= 3.14;
$holder = (double) $undecided;
通常轉換不需要額外的動作,PHP 會自動轉換。
程式碼:
= "
$test = (integer) $test;
echo "寬度是 $test 公分";
常數
define() - 定義一個常數。
程式碼:
("CONSTANT", "word");
如果提供第三個 boolean 的參數可以決定大小寫是否相同。
三元運算子
(expression) ? returned_if_true : returned_if_false;
範例:($var1 + $var2 = 3) ? '對' : '不對';
全域變數 (global variable)
程式碼:
= "hello";
function functionName()
{
global $test;
...
}
改變函式裡面的變數相同的也會改變原來的變數。
靜態變數 (static variable)
程式碼:
function functionName()
{
static $test = 0;
...
}
靜態變數相同於區域變數,但是跳出函式後還是會記得數值。
參照變數
在變數的前面加上 &.
程式碼:
function Output(&$data)
{
$this->data =& $data;
}
如果要傳回參照變數,在函式的前面加上 &:
function &Output($data)
陣列
陣列可以用 array() 或空白的 [] 來定義。
程式碼:
= array("Bert", "Sharon", "Betty", "Harry");
新增元素到陣列的最後面:
$users[] = "Sally";
關聯陣列 (associative array)
程式碼:
= array(
"name" => "bob",
"occupation" => "superhero",
"age" => 30,
"special power" => "x-ray vision"
);
print $character['age'];
上面的 name, occupation...是用來取代本來的陣列數字。
尋找陣列值
程式碼:
foreach ($array as $temp)
{
...
}
$array 是要循環的陣列,$temp 是儲存數值的變數。
PHP 跟 Perl 不同的地方是,用 PHP 改變 $temp 變數不會改變陣列裡的值。
尋找關聯陣列 (associative array)
程式碼:
foreach ($array as $key => $value)
{
...
}
$key 是儲存關聯陣列的 key 值,$value 是用來儲存陣列的值。
printf() 類型指令列表:
d - 顯示整數
b - 顯示二元數字
c - 顯示 ASCII 的格式
f - 顯示浮點
o - 顯示八元數字 (base 8)
s - 顯示字串
x - 顯示小寫的 16 元數字 (base 16)
X - 顯示大寫的 16 元數字 (base 16)
填補字串
填補輸出的資料。
程式碼:
("%04d", 36);
// 輸出:0036
如果要用字母來填補,字母前面要加上單引號 ':
程式碼:
("%'x4d", 36);
// 輸出:xx36
小數點
數字加上小數點的數量。
程式碼:
("%.2f", 5.3333333);
// 輸出:5.33
表單
Superglobal 陣列
$_COOKIE - 包含 cookie 的變數。
$_ENV - 包涵主機的環境變數。
$_FILES - 包含上傳的檔案資訊。
$_GET - 包含 http get 的變數。
$_POST - 包含 http post 的變數。
$_REQUEST - 包含 $_GET, $_POST, $_COOKIE 的變數。
$_SERVER - 包含主機的資料變數。
$GLOBALS - 包含全部的全區變數。
- __LINE__ 顯示程式文件中的該行程式行號。
- __FILE__ 程式檔的完整路徑和檔案名,如果用在於include的外部檔案中,則返回被include的檔案名。
- __FUNCTION__ 執行的函數名稱,自 PHP 5 起本常數返回該函數被定義時的名字(區分大小寫)。
- __CLASS__ 執行的類別名稱,自 PHP 5 起本常數返回該類被定義時的名字(區分大小寫)。
- __METHOD__ 執行的類別方法名稱,返回該方法被定義時的名字(區分大小寫)。
$_SERVER
$_SERVER['PHP_SELF'] #當前正在執行腳本的文件名,與 document root相關。
$_SERVER['argv'] #傳遞給該腳本的參數。
$_SERVER['argc'] #包含傳遞給程序的命令行參數的個數(如果運行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE'] #服務器使用的 CGI 規範的版本。例如,「CGI/1.1」。
$_SERVER['SERVER_NAME'] #當前運行腳本所在服務器主機的名稱。
$_SERVER['SERVER_SOFTWARE'] #服務器標識的字串,在響應請求時的頭部中給出。
$_SERVER['SERVER_PROTOCOL'] #請求頁面時通信協議的名稱和版本。例如,「HTTP/1.0」。
$_SERVER['REQUEST_METHOD'] #訪問頁面時的請求方法。例如:「GET」、「HEAD」,「POST」,「PUT」。
$_SERVER['QUERY_STRING'] #查詢(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] #當前運行腳本所在的文檔根目錄。在服務器配置文件中定義。
$_SERVER['HTTP_ACCEPT'] #當前請求的 Accept: 頭部的內容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #當前請求的 Accept-Charset: 頭部的內容。例如:「iso-8859-1,*,utf-8」。
$_SERVER['HTTP_ACCEPT_ENCODING'] #當前請求的 Accept-Encoding: 頭部的內容。例如:「gzip」。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#當前請求的 Accept-Language: 頭部的內容。例如:「en」。
$_SERVER['HTTP_CONNECTION'] #當前請求的 Connection: 頭部的內容。例如:「Keep-Alive」。
$_SERVER['HTTP_HOST'] #當前請求的 Host: 頭部的內容。
$_SERVER['HTTP_REFERER'] #鏈接到當前頁面的前一頁面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] #當前請求的 User_Agent: 頭部的內容。
$_SERVER['REMOTE_ADDR'] #正在瀏覽當前頁面用戶的 IP 地址。
$_SERVER['REMOTE_HOST'] #正在瀏覽當前頁面用戶的主機名。
$_SERVER['REMOTE_PORT'] #用戶連接到服務器時所使用的端口。
$_SERVER['SCRIPT_FILENAME'] #當前執行腳本的絕對路徑名。
$_SERVER['SERVER_ADMIN'] #管理員信息
$_SERVER['SERVER_PORT'] #服務器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服務器版本和虛擬主機名的字符串。
$_SERVER['PATH_TRANSLATED'] #當前腳本所在文件系統(不是文檔根目錄)的基本路徑。
$_SERVER['SCRIPT_NAME'] #包含當前腳本的路徑。這在頁面需要指向自己時非常有用。
$_SERVER['REQUEST_URI'] #訪問此頁面所需的 URI。例如,「/index.html」。
$_SERVER['PHP_AUTH_USER'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的用戶名。
$_SERVER['PHP_AUTH_PW'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的密碼。
$_SERVER['AUTH_TYPE'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是認證的類型。
$_SERVER['PHP_SELF'] #當前正在執行腳本的文件名,與 document root相關。
php.ini 內的 register_globals
如果 php.ini 裡面的 register_globals 是 On,那 $_GET['variable'] 裡面的 variable 就會變成全區 (gloabl) 變數。
PHP 4.2 以上的預設值是 Off。
將使用者的輸入值變成全區變數
程式碼:
import_request_variable("g", "import_");
這會建立一個叫 $import_username 的全區變數,包含了使用者的 username 數值。
類型引數 (type argument) 可以是 g 表示 get,p 表示 post,c 表示 cookie。
簡短的開始標籤
程式碼:
print $test; ?>
// 可以變成
// 注意並不是每個主機都可以用
檔案上傳
HTML 表單包含了檔案上傳必須要加上 ENCTYPE。
程式碼:
<form enctype="multipart/form-data" action="" method="post">
也可以隱藏的欄位來限制檔案大小,不過最好用 php.ini 裡的設定來限制。
檔案上傳成功後會得到特殊的檔名,暫時放置於 php.ini 設定的 upload_tmp_dir 目錄。
$_FILES數組內容如下:
$_FILES['myFile']['name'] 客戶端文件的原名稱。
$_FILES['myFile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上傳文件的大小,單位為字節。
$_FILES['myFile']['tmp_name'] 文件被上傳後在服務端儲存的臨時文件名,一般是系統默認。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函數設置是不起作用的。
$_FILES['myFile']['error'] 和該文件上傳相關的錯誤代碼。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的說明:(它們在PHP3.0以後成了常量)
UPLOAD_ERR_OK
值:0; 沒有錯誤發生,文件上傳成功。
UPLOAD_ERR_INI_SIZE
值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上傳。
UPLOAD_ERR_NO_FILE
值:4; 沒有文件被上傳。
值:5; 上傳文件大小為0.
文 件被上傳結束後,默認地被存儲在了臨時目錄中,這時您必須將它從臨時目錄中刪除或移動到其它地方,如果沒有,則會被刪除。也就是不管是否上傳成功,腳本執 行完後臨時目錄裡的文件肯定會被刪除。所以在刪除之前要用PHP的 copy() 函數將它複製到其它位置,此時,才算完成了上傳文件過程。
@ 字元
如果不想顯示連結資料庫的錯誤,可以在 mysql_connect 和 mysql_select_db 前面加上 @ 字元。
程式碼:
@mysql_select_db($smf);
物件
const
定義一個常數。
程式碼:
const PI = 3.14;
echo MyClass::PI;
static
定義靜態數值。可在程式運行時改變。
程式碼:
static $SALES_TAX = 9;
正規表示法
量詞
* - 零個或以上 - a*
+ - 一個或以上 - a+
? - 零個或一個 - a?
{n} - n 個 - a{3}
{n,} - 至少 n 個 - a{3,}
{,n} - 最多 n 個 - a{,3}
{n1, n2} - 最少 n1 個,不多於 n2 個 - a{1,2}
範例:
p.*t - p 然後任何數量的字元,在 t 之前
p.*?t - p 然後最少數量的字元,在 t 之前
字元分類 []
[ab] 會相配 a 或 b
[ab]+ 會相配任何有 a 或 b 的字串
[a-z] 會相配任何小寫字母
[A-Z] 會相配任何大寫字母
[0-9] 會相配任何數字
[a-z5] 會相配任何小寫字母或數字 5
非字元 ^
[^A-Z] 會相配任何非大寫的字母
跳脫字元
\d 任何數字
\D 任何非數字
\s 任何空白字元
\S 任何非空白字元
\w 任何字母數字 (包括底線 _ )
\W 任何非字母數字或底線
\A 字串開頭
\b 字串範圍
\B 非字串範圍
\Z 字串尾 (相配最後的新行字元或字尾)
\z 字串尾 (只相配字尾)
分隔形式 ()
程式碼:
("/(dont)\s+(panic)/", $test, $array);
會輸出 dont panic, dont, panic.
分割字元 |,相配第一個或第二個形式
程式碼:
= "www.example.com";
preg_match("/www\.example(\.com|\.co\.uk)/", $test, $array);
輸出 .com
^ 可以用來測試字串開頭
^a 會相配 apple 不會相配 banana.
$ 可以用來測試字尾
a$ 會相配 flea 不會相配 dear.
沒有留言:
張貼留言