關聯課件: 4子項目四 - 自定義函數(點擊在線預覽)
4.3.6 自 定 義 函 數
大商 在程序的編寫過(guò)程中往往會(huì)有一些要反複用到技筆的功能(néng)模塊,如果每次都(dōu內亮)要重複編寫這(zhè)些代碼,不僅浪費時(shí服他)間,而且還(hái)會(huì)使程序變得冗長(cháng)、科坐可讀性差,維護起(qǐ)來也很不方便。PHP允許程序設計者將(jiā哥遠ng)常用的流程或者變量等,組織成(chéng)一自紅個固定的格式。也就(jiù)是說(shuō)用戶可以自行組合函數或者鐘短是類。這(zhè)樣(yàng)在編寫好(hǎo)函數或類之後(hòu)河車,在使用時(shí)就(jiù)不媽水必關心其中的細節,拿過(guò)來就(理鐘jiù)可以用。要做功能(nén著化g)修改時(shí),隻需修改函數在得中的内容即可。下面(miàn)就對劇(jiù)來看看自定義函數的定義與使用。
PHP中的函數分爲内置函劇暗數和用戶自定義函數兩(liǎng)大類。有關内置函數的知識那輛將(jiāng)在第5章中詳細講解,下面就長(miàn)就(jiù)自定義函數進(jìn)行講解。
4.3.6.1 函數的定物腦義與調用
PHP中的函數愛車與C語言中的函數類似。函數定義厭吃的語法爲:
function函數名(形式參數列表){物通
&亮跳nbsp; 函數體;
&n小是bsp; &nb雨訊sp; return返回值;
}
PHP中的函數可以也朋有返回值,也可以沒(méi)有返回值。在函數的名稱上,PH樹火P對(duì)于大小寫的管理比較松散畫刀。可以在定義函數時(shí)寫成(chéng)大寫的名字,而在使用時(裡對shí)使用小寫的名字。不過(guò),PHP對(duì在唱)用戶自定義函數的函數名也是有一技會些具體的要求。
①不能(néng)與PHP的内部函數同名。
②不能(néng)與PHP的關鍵字重名。
③不能(néng)以數字或下劃線開(kāi)頭。
④不能(néng)包含點号“.”和中文字符。
函數體是實現函數功能(微拿néng)的語句體。函數體中即使隻有一條語句,外面(miàn)的大括号也不電秒能(néng)省略。
&nbs睡費p; 函數調用的語法爲:
函數名(實際參數列表);
實際參數列表要離老與形式參數列表相對(duì)應(有默認參數時(shí),實嗎月際參數還(hái)要與默認參數對(duì)應)。如果實際少店參數比形式參數多,多餘的參數會(huì)被(bèi)自動舍棄;如果實際參數比形農信式參數少,實際參數會(huì)被(bèi)一一填入形式參數中問她,不足部分以空參數代替。實際參數和形式參數之間的傳遞機森國制會(huì)在3.6.2節中詳細講述。
如果函數有返回值,還(hái也習)可以利用函數調用爲變量賦值,其語法爲:
變量=函數名(實際參數列表);
程序4-22.php函數的定義和調用的示例。
<!--文件4-22.php:函數的定義和調用=>求階乘微校--> <HTML> <HEAD>  間我; &n些車bsp;<TITLE>函你遠數的定義和調用=>求階乘&l東匠t;/TITLE> </HEAD> <BODY&樹著gt; <?php &分說nbsp; &nbs可鄉p; 河亮function factorial($n)慢爸 &nbs長體p; { 國房  器笑; &n錢爸bsp;$result=1;  有對; 討但 f吃費or ($i=2;$i<理男;=$n;$i ) &nbs拿金p; &那吃nbsp; &nb慢街sp; $result*= $i; &nbs離如p; &n樹雨bsp; return&路刀nbsp;$result; &nbs相什p; &nb冷民sp;} &紙器nbsp; fo短藍r ($i=1;$i<如拿=6;$i ) &n我微bsp; &nb術城sp;{ &nbs著刀p; &nb喝美sp; &nbs科兵p; $num=factorial($i); &飛上nbsp; &n他時bsp; &謝錯nbsp; echo&nb可拍sp;$i."!=".$num.&資火quot;<br>&購行quot;; 吧遠 } &nb件鄉sp; ?> </BODY> </HTML快要>
程序4-22.php的運行結果如圖4-19所示。
圖4-19 程序4-22.php的運行結果
4.3.6.2 參數傳遞
在調用函數時(shí)請能,要填入與函數形式參數個數相同的實際參數(有默認參數的除外),在程序運行子鄉過(guò)程中,實際參數就(jiù)會(雨醫huì)傳遞給相應的形式參數,然後(hòu)在函數中實現對(du照是ì)數據的處理和返回。實際參數很男向(xiàng)形式參數傳遞的過(guò)程中,共有值傳遞、引用傳鐘鄉遞、默認參數3種(zhǒng)機制。
1. 值傳遞
&n妹劇bsp;值傳遞就(jiù)是將(jiāng)實際參數的值拷貝到形式參數中筆厭,然後(hòu)使用形式參數在函數内部廠黃進(jìn)行運算,函數調用結束後(hò靜些u),實際參數的值不會(huì)訊見發(fā)生改變。
&學見nbsp; 用這(zhè)種(zhǒng)方式調用的函數一般都(dōu)明在有返回值或輸出值,否則函數調用沒(méi)有實際意義。程序4-22.討資php中就(jiù)是使用的這(zhè)種(zhǒng劇腦)傳遞方式。
2. 引用傳遞
&nbs外湖p; 如果要實現形式參數改變時(shí)實際參數也發(fā)開去生相應的改變,就(jiù)要使用引用傳遞的方式。參數的引用傳遞也有兩老得(liǎng)種(zhǒng)方法。
(1)定義函數時(shí),在司山形式參數前面(miàn)加上“&”符号,如:
function fun(&am低外p;$var1){……}
(2)函數調用時(shí),在實能很際參數前面(miàn)加上“&”符号,如:
function fun($var1){……}
fun(&$var2)
如果形式參數$var1的值在函數中發(fā)生改變,土海實際參數$var2的值也會(huì)發(fā)動腦生相應的改變。
3. 默認參數
PHP還(h動員ái)支持有默認值的參數,即定義函數時(shí)你相可以爲一個或多個形式參數指定默認值。
程序4-23.php爲函數的參數傳遞的3種下頻(zhǒng)方式舉例。
<!--文件4-23.php:函數參數的傳遞--> &l飛笑t;HTML> <HEAD> &n懂問bsp; &l現國t;TITLE>函數參數的傳遞</TI愛音TLE> </HEAD>黑跳 <BODY>  是件; <?php &nbs和如p; &nb樹兒sp; functio兒技n myfun1($var1) &nbs長數p; &nb我鐵sp; { /和空/值傳遞測試函數 老到 &nbs黃微p; &n外南bsp; $var1=88; &多舊nbsp; &n服笑bsp; }  海會; 拍呢function myfun2(&am一資p;$var1) &n喝厭bsp; &nb科海sp;{ //第一種(zhǒng)引計暗用傳遞測試函數 一海 &nbs商制p; $var冷照1=88;  放愛; &nb物玩sp; } &下拿nbsp; 會鐵 大農function myfun3($string,$color=民草"red") 術街 &nb道也sp; { &nb男匠sp;//默認參數傳遞測試函數 &nbs飛市p;  和電; 子說 echo 妹民;"<font color=".$co聽森lor.">".我爸$string."</font>"路西;; &但地nbsp;  資我; } &nb快窗sp; &nb森喝sp;$var1=66;  黃如;  船廠; $string=&quo花得t;這(zhè)是紅色字體!&quo對白t;; &nb習著sp; 腦金 echo &q車城uot;初始值:$var=".$var1也答."<br>"; 冷化 作熱 myfun1新音($var1); &聽了nbsp; echo "影算值傳遞結束後(hòu):$va通對r=".$var1."&l煙長t;br>"; &n劇風bsp; &nb要音sp; myfun2($var1會農); &n學林bsp; echo &街是quot;第一種(zhǒng)引用傳遞結服畫束後(hòu):$var=".$var1.喝街"<br>";  計車; &微時nbsp; echo &q影匠uot;默認參數的效果爲:&quo員爸t;; &n冷廠bsp; myfun3($string); &nbs器東p; ?&影南gt; </BODY> </HTML>兵用
程序4-23.php的運行結果木年如圖4-20所示。
圖4-20 程序4-23.php的運行結果
4.3.6.3 變量函數
&nbs弟熱p;PHP支持變量函數的概念,可以方便地利用變量實志車現對(duì)函數的調用。使用的基本格式爲:
function fun(){……}
$var="fun";
$var();
其中$var();就(離高jiù)相當于調用函數fun(),$var()爲可變函數。可變函在麗數與普通函數調用時(shí)的最大區别就(jiù)在于可變函數在商前面(miàn)有"$",師都有此符号,系統就(jiù)會(huì)劇行認爲是可變函數。
程序4-24.php爲變量函數的示例。
<!--文件4-24.php:變量函數--> <HT頻國ML> <HEAD>  生說; <TITLE>報下;變量函數</TITLE> </HEAD頻媽> <BODY&g著化t; <?php &nb美行sp; &nbs弟玩p; functio你東n myfun() &nb裡能sp; &n聽火bsp; { &nbs舞動p; 鐘通 東裡 &nb科湖sp;return "變量函數執行成(chéng)功吧鄉!"; &身土nbsp; } 弟金 &n玩說bsp; $var高北="myfun";  們高; echo&長火nbsp;$var(); &nb哥校sp;  歌子;echo "<br&g懂間t;"; &n近問bsp; 信呢$var="myfun()";  動笑; 年熱 &nbs數筆p; echo $var; &nbs公物p; ?&下術gt; </BODY> </HTML>
程序4-24.php的運行結果如圖4-21所示。
圖4-21 程序4-24.php的運行結果
PHP加密和解密函數可以用來加密一些有用的字符串存放在數據問下庫裡(lǐ),并且通過(guò北動)可逆解密字符串,該函數使用了base64和MD5加密和解密長但。 function encryptDecrypt($那問key, $string, $decrypt){ 來姐if($decrypt){ $decry通腦pted = rtrim(mcrypt_decryp西厭t(MCRYPT_RIJNDA哥音EL_256, md5($key), base64_deco數兒de($string), MCRYPT_黃門MODE_CBC, md5(md5($key))), "12&通靜quot;); 來車 return $decrypted;森章 }else{ $en是能crypted = base64_encode(mcrypt_encry可費pt(MCRYPT_RIJNDAEL_256, md5($key), $str間行ing, MCRYPT_MODE_CBC, md5(md5($key場喝)))); return $encrypted; 和個 } }
使用方法如下: //以下是將少近(jiāng)字符串“Hell商時oweba歡迎您”分别加密和解密 //加密:購線 echo encryptDecrypt('passwo件做rd', 'Helloweba歡迎您',0); //解密: 時地 echo encryptDecrypt('pa北的ssword', 'z0JAx4qMwcF+db5TNbp/xw一信dUM84snRsXvvpXuaCa4Bk=見街',1);
講的條理清晰,聽起(qǐ)來非常的流暢
這(zhè)些語法基礎對(duì)于剛學(xué)習PHP的人來說(sh他子uō)是非常重要的,條理清晰,方便學(xué)習
在調用函數時(shí),要填入與函那讀數形式參數個數相同的實際參數(有默認參數的除外),在程序運視坐行過(guò)程中,實際參數就(jiù著樂)會(huì)傳遞給相應的形式參數,然後(hòu)在函數中實現對(duì器光)數據的處理和返回。實際參數向(xiàng)形式參數傳遞的過(guò)程中自朋,共有值傳遞、引用傳遞、默認參數3種(zhǒ工化ng)機制。