關聯課件: 4子項目四 - 自定義函數(點擊在線預覽)
4.3.6 自 定 義 函 數
在程序的編寫過(guò)程中往往會有一些要反複用到的功能(néng)模塊,如果每次都(dōu)要重複編寫這(zhè)些代碼,不僅浪費時間,而且還(hái)會使程序變得冗長(cháng)、可讀性差,維護起(qǐ)來也很不方便。PHP允許程序設計者將(jiāng)常用的流程或者變量等,組織成(chéng)一個固定的格式。也就是說用戶可以自行組合函數或者是類。這(zhè)樣在編寫好(hǎo)函數或類之後(hòu),在使用時就不必關心其中的細節,拿過(guò)來就可以用。要做功能(néng)修改時,隻需修改函數中的内容即可。下面(miàn)就來看看自定義函數的定義與使用。
PHP中的函數分爲内置函數和用戶自定義函數兩(liǎng)大類。有關内置函數的知識將(jiāng)在第5章中詳細講解,下面(miàn)就自定義函數進(jìn)行講解。
4.3.6.1 函數的定義與調用
PHP中的函數與C語言中的函數類似。函數定義的語法爲:
function函數名(形式參數列表){
函數體;
return返回值;
}
PHP中的函數可以有返回值,也可以沒(méi)有返回值。在函數的名稱上,PHP對(duì)于大小寫的管理比較松散。可以在定義函數時寫成(chéng)大寫的名字,而在使用時使用小寫的名字。不過(guò),PHP對(duì)用戶自定義函數的函數名也是有一些具體的要求。
①不能(néng)與PHP的内部函數同名。
②不能(néng)與PHP的關鍵字重名。
③不能(néng)以數字或下劃線開(kāi)頭。
④不能(néng)包含點号“.”和中文字符。
函數體是實現函數功能(néng)的語句體。函數體中即使隻有一條語句,外面(miàn)的大括号也不能(néng)省略。
函數調用的語法爲:
函數名(實際參數列表);
實際參數列表要與形式參數列表相對(duì)應(有默認參數時,實際參數還(hái)要與默認參數對(duì)應)。如果實際參數比形式參數多,多餘的參數會被自動舍棄;如果實際參數比形式參數少,實際參數會被一一填入形式參數中,不足部分以空參數代替。實際參數和形式參數之間的傳遞機制會在3.6.2節中詳細講述。
如果函數有返回值,還(hái)可以利用函數調用爲變量賦值,其語法爲:
變量=函數名(實際參數列表);
程序4-22.php函數的定義和調用的示例。
<!--文件4-22.php:函數的定義和調用=>求階乘--> <HTML> <HEAD> <TITLE>函數的定義和調用=>求階乘</TITLE> </HEAD> <BODY> <?php function factorial($n) { $result=1; for ($i=2;$i<=$n;$i ) $result*= $i; return $result; } for ($i=1;$i<=6;$i ) { $num=factorial($i); echo $i."!=".$num."<br>"; } ?> </BODY> </HTML>
程序4-22.php的運行結果如圖4-19所示。
圖4-19 程序4-22.php的運行結果
4.3.6.2 參數傳遞
在調用函數時,要填入與函數形式參數個數相同的實際參數(有默認參數的除外),在程序運行過(guò)程中,實際參數就會傳遞給相應的形式參數,然後(hòu)在函數中實現對(duì)數據的處理和返回。實際參數向(xiàng)形式參數傳遞的過(guò)程中,共有值傳遞、引用傳遞、默認參數3種(zhǒng)機制。
1. 值傳遞
值傳遞就是將(jiāng)實際參數的值拷貝到形式參數中,然後(hòu)使用形式參數在函數内部進(jìn)行運算,函數調用結束後(hòu),實際參數的值不會發(fā)生改變。
用這(zhè)種(zhǒng)方式調用的函數一般都(dōu)有返回值或輸出值,否則函數調用沒(méi)有實際意義。程序4-22.php中就是使用的這(zhè)種(zhǒng)傳遞方式。
2. 引用傳遞
如果要實現形式參數改變時實際參數也發(fā)生相應的改變,就要使用引用傳遞的方式。參數的引用傳遞也有兩(liǎng)種(zhǒng)方法。
(1)定義函數時,在形式參數前面(miàn)加上“&”符号,如:
function fun(&$var1){……}
(2)函數調用時,在實際參數前面(miàn)加上“&”符号,如:
function fun($var1){……}
fun(&$var2)
如果形式參數$var1的值在函數中發(fā)生改變,實際參數$var2的值也會發(fā)生相應的改變。
3. 默認參數
PHP還(hái)支持有默認值的參數,即定義函數時可以爲一個或多個形式參數指定默認值。
程序4-23.php爲函數的參數傳遞的3種(zhǒng)方式舉例。
<!--文件4-23.php:函數參數的傳遞--> <HTML> <HEAD> <TITLE>函數參數的傳遞</TITLE> </HEAD> <BODY> <?php function myfun1($var1) { //值傳遞測試函數 $var1=88; } function myfun2(&$var1) { //第一種(zhǒng)引用傳遞測試函數 $var1=88; } function myfun3($string,$color="red") { //默認參數傳遞測試函數 echo "<font color=".$color.">".$string."</font>"; } $var1=66; $string="這(zhè)是紅色字體!"; echo "初始值:$var=".$var1."<br>"; myfun1($var1); echo "值傳遞結束後(hòu):$var=".$var1."<br>"; myfun2($var1); echo "第一種(zhǒng)引用傳遞結束後(hòu):$var=".$var1."<br>"; echo "默認參數的效果爲:"; myfun3($string); ?> </BODY> </HTML>
程序4-23.php的運行結果如圖4-20所示。
圖4-20 程序4-23.php的運行結果
4.3.6.3 變量函數
PHP支持變量函數的概念,可以方便地利用變量實現對(duì)函數的調用。使用的基本格式爲:
function fun(){……}
$var="fun";
$var();
其中$var();就相當于調用函數fun(),$var()爲可變函數。可變函數與普通函數調用時的最大區别就在于可變函數前面(miàn)有"$",有此符号,系統就會認爲是可變函數。
程序4-24.php爲變量函數的示例。
<!--文件4-24.php:變量函數--> <HTML> <HEAD> <TITLE>變量函數</TITLE> </HEAD> <BODY> <?php function myfun() { return "變量函數執行成(chéng)功!"; } $var="myfun"; echo $var(); echo "<br>"; $var="myfun()"; echo $var; ?> </BODY> </HTML>
程序4-24.php的運行結果如圖4-21所示。
圖4-21 程序4-24.php的運行結果
PHP加密和解密函數可以用來加密一些有用的字符串存放在數據庫裡(lǐ),并且通過(guò)可逆解密字符串,該函數使用了base64和MD5加密和解密。 function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12"); return $decrypted; }else{ $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); return $encrypted; } }
使用方法如下: //以下是將(jiāng)字符串“Helloweba歡迎您”分别加密和解密 //加密: echo encryptDecrypt('password', 'Helloweba歡迎您',0); //解密: echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1);
講的條理清晰,聽起(qǐ)來非常的流暢
這(zhè)些語法基礎對(duì)于剛學(xué)習PHP的人來說是非常重要的,條理清晰,方便學(xué)習
在調用函數時,要填入與函數形式參數個數相同的實際參數(有默認參數的除外),在程序運行過(guò)程中,實際參數就會傳遞給相應的形式參數,然後(hòu)在函數中實現對(duì)數據的處理和返回。實際參數向(xiàng)形式參數傳遞的過(guò)程中,共有值傳遞、引用傳遞、默認參數3種(zhǒng)機制。