2017年10月11日 星期三

PHP內建函式

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資料型態
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

程式裡最好不要任意變更資料型態,以避免錯誤發生、除錯困難、轉換過程中遺失部分資料。


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");
}

顯示結果
為整數真否=1
TRUE


處理字串的函式
有三個非常實用的字串函式,分別為:
1.  轉換英文大小寫函式
2.  刪除無效空白字元函式
3.  計算字串裡的字數函式


轉換英文大小寫函式
函式:strtoupper()strtolower()
傳回的值:轉換之後的結果,其資料型態為「字串」
舉例:
strtoupper($name) 將字串通通變成大寫
strtolower($name) 將字串通通變成小寫
程式範例
$s="abcdefgHIJKLMNOPQrStUvWxYz123456台灣Qq";

echo(strtoupper($s)."&nbsp=全部大寫
");
echo(strtolower($s)."&nbsp=全部小寫
");

$ok=strtoupper($s);
echo($ok."&nbsp=\$ok
");
echo($s."&nbsp=\$s
");

顯示結果
ABCDEFGHIJKLMNOPQRSTUVWXYZ123456出灣QQ =全部大寫
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


補充說明
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


處理數值的函式
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

利用date()函式,所取得的時間資料,都是「字串」資料型態,而非「整數」
若要計算時間差距,建議還是先用intval()函式,轉換成整數後,再做運算


mktime() 距離XX還有幾天
取得某一天與絕對日期的秒數:
mktime( [hour],[minute],[second],[month],[day],[year] )
回傳的值:自絕對日期到該天的秒數,其資料型態為整數
舉例:mktime(0,0,0,1,1,2020)

雖然PHP沒有類似計時器(Timer)的函式,無法設計出類似倒數時鐘的網頁,
不過利用mktime()函式,卻可以隨時取得與「絕對日期」的秒數
所謂的「絕對日期」,指的是1970年的11000
範例
$time = mktime(0,0,0,1,1,2020);
echo($time."");
顯示結果
1577808000
要算出其202011000秒,
1970年的11000(絕對日期),的天數差
程式範例
$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]
[]
[]



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

沒有留言:

用頭腦去思考,不要人云亦云才好, 宗教信徒就是依賴與自私心態(求東求西)的人, 光是這點就很容易暴露弱點了, 難怪seafood吃飽飽,哈哈。 續上, 除了依賴與自私心態(兩者都是人性)之外。 另外也有很大一部份的人,是人云亦云的思考邏輯, 所以宗教才能譁眾取寵。