PHP內建函式
要練就一身不凡的設計功力,除了平時的練習之外,善用「內建函式」也是不可或缺的
處理變數的函式
關於變數相關的內建函式有許多,在此將介紹以下四種:
1. gettype(); 取得變數資料型態的函式
2. settype(); 指定變數資料型態的函式
3. unset();
刪除變數,釋放記憶體的函式
4. is_...();
判斷變數的資料型態函式
gettype(); 取得變數資料型態的函式
函式:gettype($var)
回傳的值:「integer」、「string」、「double」、「NULL」字眼,資料型態「字串」
範例
$e="john";
echo("\$e=\"".$e."\"
其資料型態為".gettype($e)."
");
");
if(gettype($e)==string)
{
echo("確實是".gettype($e)."資料型態");
}
else
{
echo("NOT!");
}
顯示結果
$e="john" 其資料型態為string
確實是string資料型態
確實是string資料型態
settype(); 指定變數資料型態的函式
函式:settype($var)
回傳的值:轉換成功回傳「true」;轉換失敗回傳「false」
舉例
settype($num,"string"); //將整數,轉成字串資料型態
type(轉換型態)
|
integer
|
double
|
string
|
array
|
範例
$a="101";
settype($a,"integer"); //寫成settype($a,integer);亦可因為關鍵字
$a+=10;
echo($a);
顯示結果
111
查驗轉換的成功與否
$a="101";
settype($a,integer);
if(settype($a,integer)==true)
{
echo("success!
");
");
$a+=10;
echo($a);
}
顯示結果
success!
111
111
程式裡最好不要任意變更資料型態,以避免錯誤發生、除錯困難、轉換過程中遺失部分資料。
unset(); 刪除變數,釋放記憶體的函式
函式:unset($var)
回傳的值:沒有回傳值
舉例
unset($money); //將$money釋放
unset()函式只能釋放「變數」,並無法釋放「常數」
若是嚐試刪除常數,則會發生執行錯誤的警告
is_...(); 判斷變數的資料型態函式
函式:is_integer($var)、is_string($var)等等
回傳的值:若資料型態與判斷函式is_...()相符,則回傳「true」;反之則傳回「false」
舉例
Is_integer($num); //判斷$num是否為整數,則傳回true
函式名稱
|
判斷的資料型態
|
is_int()
|
判斷變數是否為整數
|
is_integer()
|
判斷變數是否為整數
|
Is_long()
|
判斷變數是否為整數
|
Is_double()
|
判斷變數是否為雙倍精準數
|
Is_float()
|
判斷變數是否為浮點數
|
Is_real()
|
判斷變數是否為實數
|
Is_string()
|
判斷變數是否為字串
|
Is_array()
|
判斷變數是否為陣列
|
Is_object()
|
判斷變數是否為物件
|
例如
$test = 500;
$result =
is_integer($test);
echo("為整數真否=".$result);
if($result==true)
{
echo("
TRUE");
TRUE");
}
顯示結果
為整數真否=1
TRUE
TRUE
處理字串的函式
有三個非常實用的字串函式,分別為:
1. 轉換英文大小寫函式
2. 刪除無效空白字元函式
3. 計算字串裡的字數函式
轉換英文大小寫函式
函式:strtoupper()、strtolower()
傳回的值:轉換之後的結果,其資料型態為「字串」
舉例:
strtoupper($name) 將字串通通變成大寫
strtolower($name) 將字串通通變成小寫
程式範例
$s="abcdefgHIJKLMNOPQrStUvWxYz123456台灣Qq";
echo(strtoupper($s)." =全部大寫
");
");
echo(strtolower($s)." =全部小寫
");
");
$ok=strtoupper($s);
echo($ok." =\$ok
");
");
echo($s." =\$s
");
");
顯示結果
ABCDEFGHIJKLMNOPQRSTUVWXYZ123456出灣QQ =全部大寫
abcdefghijklmnopqrstuvwxyz123456台鑿qq =全部小寫
ABCDEFGHIJKLMNOPQRSTUVWXYZ123456出灣QQ =$ok
abcdefgHIJKLMNOPQrStUvWxYz123456台灣Qq =$s
abcdefghijklmnopqrstuvwxyz123456台鑿qq =全部小寫
ABCDEFGHIJKLMNOPQRSTUVWXYZ123456出灣QQ =$ok
abcdefgHIJKLMNOPQrStUvWxYz123456台灣Qq =$s
中文字轉換會產生不正確中文字
刪除無效空白字元函式
函式:trim($var)
回傳的值:刪除無效空白字元的結果,其資料型態為「字串」
舉例:trim($name)、trim($pass)
程式範例
$s=" a.b c o k";
echo("=".$s."
");
");
echo("=".trim($s)."
");
");
$a=trim($s);
echo("=".$a."
");
");
顯示結果
= a.b
c o k
=a.b c o k
=a.b c o k
=a.b c o k
=a.b c o k
補充說明
trim()僅能刪除字串前面的空白字元
如果空白字元是在字串中間,那麼trim()將無法處理。
因為字串間的空白已被PHP視為有效的空白
計算字串裡的字數
函式:strlen($var)
回傳的值:字串裡包含的字元數,其資料型態為「整數」
舉例:strlen($name)、strlen($pass)
程式範例
$s=" a.b c o k";
echo("\$s=\"".$s."\"
");
");
echo("字數=".strlen($s)."
");
");
$a=strlen($s) + 101;
echo("字數=".$a."
"); //傳回計算的結果「整數」
"); //傳回計算的結果「整數」
顯示結果
$s="
a.b c o k"
字數=10
字數=111
字數=10
字數=111
處理數值的函式
PHP提供了許多處理變數的函式,於此介紹兩個最常用到的數值函式
1. intval() 轉換成整數
2. doubleval() 轉換成實數
intval() 轉換成整數
函式:intval($var)
回傳的值:轉換之後的數值,其資料型態為「整數」
舉例:intval($num)
程式範例
$n="101";
$a=intval($n)+intval("10");
echo("轉成整數=".$a."
");
");
顯示結果
轉成整數=111
利用intval()函式,可將小數、浮點數或字串等變數,全部轉換成「整數」
double() 轉換成實數
函式:doubleval($var)
回傳的值:轉換之後的數值,其資料型態為「雙倍精準數」
舉例:doubleval($num)
將數值(或數值字串)轉換成雙倍精準數,其與intval()函式屬一類的轉換函式
日期與時間的函式
舉凡會員的權限到期日、在網頁裡下訂單的時間等等,都會用到這類的函式
以下介紹PHP裡最常用到的函式:
1. date()
取得系統的日期、時間
2. mktime() 距離XX還有幾天
date() 取得系統的日期、時間
函式:date(format)
回傳的值:日期或時間,其資料型態皆為「字串」
舉例:date(H)、date(h)、date(w)等等
利用date()函式,將系統(伺服器)正確的時間顯示出來
其中format參數有:
傳入參數
|
說明
|
回傳的值
|
a
|
上午、下午符號
|
"am"或"pm"
|
A
|
上午、下午符號
|
"AM"或"PM"
|
d
|
日數(數字)
|
"01"~"31"
|
D
|
星期的英文縮寫
|
"Mon"、"Tue"、"Wed"等
|
F
|
月份(英文)
|
"January"、"Febuary"等
|
h
|
小時(12時制) (數字)
|
"00"~"12"
|
H
|
小時(24時制) (數字)
|
"00"~"23"
|
g
|
小時(12時制) (數字)
|
"1"~"12" (前面沒有0)
|
G
|
小時(24時制) (數字)
|
"0"~"23" (前面沒有0)
|
i
|
分鐘(數字)
|
"00"~"59"
|
j
|
日數(數字)
|
"1"~"31"
|
l
|
星期的英文全名
|
"Monday"、"Tuesday"等
|
L
|
是否閏年(數字)
|
"1"表閏年,"0"表不閏年
|
m
|
月份(數字)
|
"01"~"12"
|
M
|
月份的英文縮寫
|
"Jan"、"Feb"、"Mar"等
|
n
|
月份(數字)
|
"1"~"12" (前面沒有0)
|
s
|
秒數(數字)
|
"00"~"59"
|
t
|
該月份有幾天(數字)
|
"28"、"29"、"30"、"31"
|
U
|
自絕對日期到該日的秒數(整數)
|
秒數
|
w
|
星期幾(數字)
|
"0"~"6" (0表示星期日)
|
y
|
西元(數字)
|
07
|
Y
|
西元(數字)
|
2007
|
z
|
當日為年度的第幾天
|
"0"~"365"
|
Z
|
本地與格林威治的時間差(數字)
|
"-43200"~"43200"秒
|
程式範例
$da=date(z);
echo($da."=z
");
");
echo(date(a)."=a
");
");
echo(date(A)."=A
");
");
echo(date(d)."=d
");
");
echo(date(D)."=D
");
");
echo(date(h)."=h
");
");
echo(date(H)."=H
");
");
echo(date(g)."=g
");
");
echo(date(G)."=G
");
");
echo(date(l)."=l
");
");
echo(date(U)."=U
");
");
echo(date(w)."=w
");
");
echo(date(y)."=y
");
");
echo(date(Y)."=Y
");
");
顯示結果
180=z
pm=a
PM=A
30=d
Sat=D
03=h
15=H
3=g
15=G
Saturday=l
1183187033=U
6=w
07=y
2007=Y
pm=a
PM=A
30=d
Sat=D
03=h
15=H
3=g
15=G
Saturday=l
1183187033=U
6=w
07=y
2007=Y
利用date()函式,所取得的時間資料,都是「字串」資料型態,而非「整數」
若要計算時間差距,建議還是先用intval()函式,轉換成整數後,再做運算
mktime() 距離XX還有幾天
取得某一天與絕對日期的秒數:
mktime(
[hour],[minute],[second],[month],[day],[year] )
回傳的值:自絕對日期到該天的秒數,其資料型態為整數
舉例:mktime(0,0,0,1,1,2020)
雖然PHP沒有類似計時器(Timer)的函式,無法設計出類似倒數時鐘的網頁,
不過利用mktime()函式,卻可以隨時取得與「絕對日期」的秒數
所謂的「絕對日期」,指的是1970年的1月1日 0時0分0秒
範例
$time =
mktime(0,0,0,1,1,2020);
echo($time."秒");
顯示結果
1577808000秒
要算出其2020年1月1日 0時0分0秒,
到1970年的1月1日 0時0分0秒(絕對日期),的天數差
程式範例
$time =
mktime(0,0,0,1,1,2020);
echo(intval($time/60/60/24)."天");
顯示結果
18261天
字串的比對與正規表達式
PHP裡的字串比對函式,是屬於正規表達式(Regular Expressions)裡的一個函式,
而透過正規表達式的幫忙,可以輕易地辨識兩字串的關係,
在一般資料庫程式的撰寫、搜尋引擎的研發等等,都會用到這些函式。
比對字串的函式(有分辨英文大小寫):ereg($target,$source)
比對字串的函式(無分辨英文大小寫):eregi($target,$source)
$target可視為使用者輸入的字串
$source可視為查詢的來源(如資料庫裡的資料)
回傳的值:若找到相同的字串,則傳回1;反之則傳回0,其資料型態為「整數」
舉例:ereg("我","你我他")、eregi("我","你我他")
程式範例
$m1 =
"abcdefghijklmnopqrstuvwxyz";
$m2 =
"uvw";
$check =
ereg($m2,$m1);
if($check==1)
{
echo("有找到".$m2."字元資料");
}
顯示結果
有找到uvw字元資料
說明
正規表達式不可使用的符號「^」、「.」、「+」、「$」、「\」,將導致不可預期的程式執行錯誤
所以儘量不要使用這些「保留符號」
可以改成
@$check
= ereg($m2,$m1);
利用「錯誤處理運算子」,將錯誤「吞」下去,而不要「吐」出來。
尋找並取代字串
函式:ereg_replace($target,$change,$source) 有分辨英文大小寫
函式:eregi_replace($target,$change,$source)
無分辨英文大小寫
回傳的值:輸出取代字串後的結果,其資料型態為「字串」
舉例
$str="你的美麗看起來很快樂";
echo($str."
");
");
echo(ereg_replace("美麗","微笑",$str));
顯示結果
你的美麗看起來很快樂
你的微笑看起來很快樂
你的微笑看起來很快樂
切割字串函式
函式:split("x",$source)
回傳的值:分割後的字串陣列
舉例:split("!","Hi!
David");
程式範例
$str="Hi!
David! How are you? Yahoo";
$sp=split("are",$str);
echo("[".$str."]
");
");
echo("[".$sp[0]."]
");
");
echo("[".$sp[1]."]
");
");
echo("[".$sp[2]."]
");
");
echo("[".$sp[3]."]
");
");
顯示結果
[Hi! David! How are you? Yahoo]
[Hi! David! How ]
[ you? Yahoo]
[]
[]
[Hi! David! How ]
[ you? Yahoo]
[]
[]
與HTML相關的函式
在此介紹:
1. 導向開啟網頁的函式:header("location:網址")
2. 讓網頁自動的重新整理函式:header("refresh:時間")
導向開啟網頁
函式:header("location:網址")
回傳的值:沒有回傳值
舉例:header("location:show01.htm")
讓網頁自動重新整理
函式:header("refresh:時間;URL=網址")
回傳的值:沒有回傳值
舉例:header("refresh:5;URL=show02.php")
與header("location:網址")相同意義;惟由於使用不同參數,而有不同用途
舉例說明
Header("refresh:5;URL=show02.php")
其意義是更新時間為5秒,並且於5秒後自動開啟「show02.php」這個檔案
程式範例
header("refresh:5;URL=ex08_04.php");
echo("五秒鐘之後,將自動切換至ex08_04.php網頁
");
");
注意
refresh:5 當中的「:」左右邊是不可以有空格的,否則不會重新整理
隨機取樣函式
函式:rand(start,end)
回傳的值:取樣的結果,其資料型態通常是整數
舉例:rand(1,10)
就是「亂數」,有如「或然率」或稱之為「機率」之意
當中的兩個參數,一為「開始值」;一為「終點值」
for($n=1;$n<=3;$n++)
{
echo(rand(1,10)."
");
");
}
顯示結果
1
10
6
10
6
沒有留言:
張貼留言