- PHP+MySQL動態網站開發從入門到精通(視頻教學版)
- 張工廠
- 1597字
- 2021-01-08 17:30:23
4.2 自定義函數
其實,更多的情況下,程序員需要的是自定義函數。
4.2.1 自定義和調用函數
自定義函數的語法結構如下:
function name_of_function( param1, param2, … ){ statement }
其中name_of_function是函數名,param1、param2是參數,statement是函數的具體內容。
下面以自定義和調用函數為例進行講解。本實例主要實現酒店歡迎信息。
【例4.2】(實例文件:ch04\4.2.php)
<? php function sayhello($customer){ //自定義函數sayhello return $customer.", 歡迎您來到GoodHome酒店。"; } echo sayhello('張先生'); //調用函數sayhello ?>
本程序運行結果如圖4-2所示。

圖4-2 程序運行結果
值得一提的是,此函數的返回值是通過值返回的。也就是說return語句返回值時,創建了一個值的拷貝,并把它返回給使用此函數的命令或函數,在這里是echo命令。
4.2.2 向函數傳遞參數值
由于函數是一段封閉的程序,很多時候,程序員都需要向函數內傳遞一些數據來進行操作。
function函數名稱(參數1,參數2){ 算法描述,其中使用參數1和參數2; }
下面以計算酒店房間住宿費總價為例進行講解。
【例4.3】(實例文件:ch04\4.3.php)
<? php function totalneedtopay($days, $roomprice){ // 聲明自定義函數 $totalcost = $days*$roomprice; // 計算住宿費總價 echo "需要支付的總價:$totalcost"."元。"; // 計算住宿費總價 } $rentdays = 3; //聲明全局變量 $roomprice = 168; totalneedtopay($rentdays, $roomprice); //通過變量傳遞參數 totalneedtopay(5,198); //直接傳遞參數值 ?>
運行結果如圖4-3所示。

圖4-3 程序運行結果
【案例分析】:
(1)以這種方式傳遞參數值的方法就是向函數傳遞參數值。
(2)其中function totalneedtopay($days, $roomprice){}定義了函數和參數。
(3)不管是通過變量$rentdays和$roomprice向函數內傳遞參數值,還是像totalneedtopay (5,198)這樣直接傳遞參數值都是一樣的。
4.2.3 向函數傳遞參數引用
向函數傳遞參數引用,其實就是向函數傳遞變量引用。參數引用一定是變量引用,靜態數值是沒有引用一說的。由于在變量引用中已經知道,變量引用其實就是對變量名的使用,是對特定的變量位置的使用。
下面仍然以計算酒店服務費總價為例進行講解。
【例4.4】(實例文件:ch04\4.4.php)
<? php $fee = 300; $serviceprice = 50; function totalfee(&$fee, $serviceprice){ // 聲明自定義函數,參數前多了&,表示 按引用傳遞 $fee = $fee+$serviceprice; // 改變形參的值,實參的值也會發生改變 echo "需要支付的總價:$fee"."元。"; } totalfee($fee, $serviceprice); //函數外部調用fun()函數前$fee =300 totalfee($fee, $serviceprice); //函數外部調用fun()函數后$ fee =350 ?>
運行結果如圖4-4所示。

圖4-4 程序運行結果
【案例分析】:
(1)以這種方式傳遞參數值的方法就是向函數傳遞參數引用。使用“&”符號表示參數引用。
(2)其中function totalfee(&$fee, $serviceprice){}定義了函數、參數和參數引用。變量$fee是以參數引用的方式進入函數的。當函數的運行結果改變了變量$fee的引用的時候,在函數外的變量$fee的值也發生了改變,也就是函數改變了外部變量的值。
4.2.4 從函數中返回值
以上的例子中,都是把函數運算完成的值直接打印出來。但是,很多情況下,程序并不需要直接把結果打印出來,而是僅僅給出結果,并且把結果傳遞給調用這個函數的程序,為其所用。
這里需要用到return關鍵字。下面以綜合酒店客房價格和服務價格為例進行講解。
【例4.5】(實例文件:ch04\4.5.php)
<? php function totalneedtopay($days, $roomprice){ // 聲明自定義函數 return $days*$roomprice; // 返回酒店消費總價格 } $rentdays = 3; $roomprice = 168; echo totalneedtopay($rentdays, $roomprice); ?>
運行結果如圖4-5所示。

圖4-5 程序運行結果
【案例分析】:
(1)在函數function totalneedtopay($days, $roomprice)算法中,直接使用return把運算的值返回給調用此函數的程序。
(2)其中echo totalneedtopay($rentdays, $roomprice);語句調用了此函數,totalneedtopay()把運算值返回給了echo語句,才有上面的顯示。當然這里也可以不用echo來處理返回值,也可以對它進行其他處理,比如賦值給變量等。
4.2.5 對函數的引用
不管是PHP中的內置函數,還是程序員在程序中自定義的函數,都可以簡單地通過函數名調用。但是操作過程也有些不同,大致分為以下3種情況。
● 如果是PHP的內置函數,如date(),可以直接調用。
● 如果這個函數是PHP的某個庫文件中的函數,則需要用include()或require()命令把此庫文件加載,然后才能使用。如果是自定義函數,如果與引用程序同在一個文件中,則可直接引用。如果此函數不在當前文件內,則需要用include()或require()命令加載。
●如果是自定義函數,如果與引用程序同在一個文件中,則可直接引用。如果此函數不在當前文件內,則需要用include()或require()命令加載。
對函數的引用,實際上是對函數返回值的引用。
【例4.6】(實例文件:ch04\4.6.php)
<? php function &example($aa=1){ //定義一個函數,別忘了加“&”符號 return $aa; //返回參數$str } $bb= &example("引用函數的實例"); //聲明一個函數的引用$str1; echo $bb. “<br />“; ?>
運行結果如圖4-6所示。

圖4-6 程序運行結果
【案例分析】:
(1)本實例首先定義一個函數,然后變量$bb將引用函數,最后輸出變量$bb,它實際上是$aa的值。
(2)和參數傳遞不同,在定義函數和引用函數時,都必須使用“&”符號,表明返回的是一個引用。
4.2.6 對函數取消引用
對于不需要引用的函數,可以做取消操作。取消引用使用unset()函數來完成,目的是斷開變量名和變量內容之間的綁定,此時并沒有銷毀變量內容。
【例4.7】(實例文件:ch04\4.7.php)
<? php $num = 166; //聲明一個整型變量 $math = &$num; //聲明一個對變量$num的引用$math echo "\$math is: ".$math."<br />"; //輸出引用$math unset($math); //取消引用$math echo "\$num is: ".$num; //輸出原變量 ?>
運行結果如圖4-7所示。

圖4-7 程序運行結果
本程序首先聲明一個變量和變量的引用,輸出引用后取消引用,再次調用原變量。從圖4-6可以看出,取消引用后對原變量沒有任何影響。
- Mastering NetBeans
- C和C++安全編碼(原書第2版)
- Python高級編程
- RTC程序設計:實時音視頻權威指南
- Mastering C# Concurrency
- Visual C#.NET程序設計
- Oracle從入門到精通(第5版)
- 匯編語言編程基礎:基于LoongArch
- AV1視頻編解碼標準:原理與算法實現
- Angular Design Patterns
- PowerDesigner 16 從入門到精通
- Learning Image Processing with OpenCV
- JavaScript編程精解(原書第2版)
- Python 快速入門(第3版)
- Microsoft HoloLens By Example