- PHP編程基礎與實踐教程
- 干練 毛紅霞
- 1608字
- 2019-11-29 15:51:47
2.9 函數
函數就是將一些需要重復使用的功能代碼寫在一個獨立的代碼塊中,并在需要時單獨調用。
2.9.1 定義和調用函數
在PHP中,使用關鍵字function定義函數,語法格式如下。
function fun_name([mixed $arg1[, mixed $…]]) { fun_body; }
其中,fun_name為函數名;$arg1和$…為函數的參數;fun_body為函數的主體,即功能實現代碼。
在定義好函數后,只需要使用函數名并賦予正確的參數,即可調用函數,語法格式如下。
fun_name([mixed $arg1[, mixed $…]]);
其中,fun_name為函數名;$arg1和$…為賦予函數的參數。
【實例2-37(39_Function.php)】 定義并調用一個函數名為example()的自定義函數。實例代碼如下。
<?php //設置編碼格式,正確顯示中文 header("content-Type: text/html; charset=gb2312"); //定義一個函數 function example($str) { echo $str; //顯示結果 } example('定義和調用函數'); //調用函數 ?>
運行結果如圖2-37所示。

圖2-37 定義和調用函數
定義函數時,還有一種參數的設置方式,即可選參數,就是可以指定某個參數為可選參數。在PHP中,將參數放在參數列表末位,并指定其默認值,即可指定可選參數。
調用函數時,如果設置了可選參數值,那么可選參數的值為調用時的設定值;如果沒有設置可選參數值,那么可選參數的值為定義時的默認值。
【實例2-38(40_Optional_Parameter.php)】 定義并調用一個具有可選參數的自定義函數。實例代碼如下。
<?php //設置編碼格式,正確顯示中文 header("content-Type: text/html; charset=gb2312"); //定義一個函數。 function example($num1, $num2 = 2) { //顯示結果 echo '$num1 = '.$num1.', $num2 = '.$num2.'<br/>'; echo '$num1 * $num2 * 2 = '.($num1 * $num2 * 2); } echo 'exmaple(1, 3)<br/>'; //顯示結果 example(1, 3); //調用函數 echo '<br/>'; //換行 echo 'exmaple(1)<br/>'; //顯示結果 example(1); //調用函數 ?>
運行結果如圖2-38所示。

圖2-38 可選參數
2.9.2 函數間的數據傳遞
在定義和調用函數時存在兩種參數:形參和實參。形參是定義函數時定義的參數,實參是調用函數時傳入的參數。也就是說,調用函數時,需要將實參的值傳遞給形參。在PHP中,實參與形參之間數據傳遞的方式有按值傳遞和按引用傳遞兩種。

【形參和實參】
1. 按值傳遞
按值傳遞就是將實參的值賦值于對應的形參,在函數主體的操作都是針對形參進行的,操作的結果不會影響實參,即函數返回之后,實參的值不會改變。
【實例2-39(41_Pass_By_Value.php)】 使用按值傳遞的方式定義并調用一個自定義函數。實例代碼如下。
<?php //設置編碼格式,正確顯示中文 header("content-Type: text/html; charset=gb2312"); //定義一個函數 function example($num) { $num *= 2; //進行算術運算 echo'形參:$num = '.$num.'<br/>'; //顯示結果 } $num = 1; //定義一個整型變量 echo '實參:$num = '.$num.'<br/>'; //顯示結果 example($num); //調用函數 echo '函數調用之后的實參:$num = '.$num; //顯示結果 ?>
運行結果如圖2-39所示。

圖2-39 按值傳遞
2. 按引用傳遞
按引用傳遞就是將實參的內存地址傳遞給對應的形參,在函數主體針對形參進行的操作都會影響實參,即函數返回之后,實參的值會發生改變。引用傳遞參數的方式需要在定義函數時在形參前面加上符號“&”。
【實例2-40(42_Pass_By_Quote.php)】 使用按引用傳遞的方式定義并調用一個自定義函數。實例代碼如下。
<?php //設置編碼格式,正確顯示中文 header("content-Type: text/html; charset=gb2312"); //定義一個函數。 function example(&$num) { $num *= 2; //進行算術運算 echo'形參:$num = '.$num.'<br/>'; //顯示結果 } $num = 1; //定義一個整型變量 echo '實參:$num = '.$num.'<br/>'; //顯示結果 example($num); //調用函數 echo '函數調用之后的實參:$num = '.$num; //顯示結果 ?>
運行結果如圖2-40所示。

圖2-40 按引用傳遞
2.9.3 函數的返回值
在實際開發中,經常需要將函數的操作結果返回給調用者。在PHP中,通常使用關鍵字return來返回函數的操作結果,語法格式如下。
return mixed $value;
return會將程序控制權返回調用者的作用域,并將函數的操作結果$value返回給調用者。
注意:1. 關鍵字return只能返回一個值,如果需要函數返回多個值,可以使用數組來返回值。
2. 如果在全局作用域中使用關鍵字return,那么會終止腳本的執行。
【實例2-41(43_Return_Value.php)】 定義并調用一個自定義函數,并獲取函數的返回值。實例代碼如下。
<?php //設置編碼格式,正確顯示中文 header("content-Type: text/html; charset=gb2312"); //定義一個函數 function example() { return '函數的返回值'; //返回結果 } $str = example(); //調用函數 echo $str; //顯示結果 ?>
運行結果如圖2-41所示。

圖2-41 函數的返回值
2.9.4 變量函數
變量函數和可變變量非常相似,可以通過變量來調用,即根據變量的值來調用相應的函數。
在PHP中,在變量名后面加上一對小括號,并在其中賦予正確的參數,即可實現變量函數。
【實例2-42(44_Variable_Function.php)】 定義并調用一個變量函數。實例代碼如下。
<?php //設置編碼格式,正確顯示中文 header("content-Type: text/html; charset=gb2312"); //定義一個函數 function example() { echo '變量函數'; //顯示結果 } $str = 'example'; //定義一個字符串型變量 $str(); //調用變量函數 ?>
運行結果如圖2-42所示。

圖2-42 變量函數
說明:$str()為變量函數,在執行時,首先將$str解析為值example,然后調用函數example()。
2.9.5 引用函數
函數的引用和變量的引用賦值非常相似,即將函數的內存地址傳給一個變量,通過變量即可引用函數。
在PHP中,在函數名前加上符號“&”,并賦值給變量,即可實現對函數的引用。
說明:對函數的引用實際上是對函數返回結果的引用。
【實例2-43(45_Referencing_Function.php)】 定義一個函數,并對其進行引用。實例代碼如下。
<?php //設置編碼格式,正確顯示中文 header("content-Type: text/html; charset=gb2312"); //定義一個函數 function &example() { return '引用函數'; //返回結果 } $str = &example(); //對函數進行引用 echo $str; //顯示結果 ?>
運行結果如圖2-43所示。

圖2-43 引用函數
當不需要對函數繼續引用時,可以使用unset()函數取消對函數的引用。
【實例2-44(46_Dereference.php)】 取消對函數的引用。實例代碼如下。
<?php //設置編碼格式,正確顯示中文 header("content-Type: text/html; charset=gb2312"); //定義一個函數 function &example() { return '引用函數'; //返回結果 } $str = &example(); //對函數進行引用 echo $str.'<br/>'; //顯示結果 unset($str); //取消引用 echo $str; //顯示結果 ?>
運行結果如圖2-44所示。

圖2-44 取消引用

【變量函數和引用函數】
- Instant Testing with CasperJS
- Implementing Modern DevOps
- Vue.js設計與實現
- 體驗設計原理:行為、情感和細節
- Building Mobile Applications Using Kendo UI Mobile and ASP.NET Web API
- Easy Web Development with WaveMaker
- 概率成形編碼調制技術理論及應用
- Android程序設計基礎
- Create React App 2 Quick Start Guide
- Instant PHP Web Scraping
- Python Interviews
- 分布式數據庫原理、架構與實踐
- OpenCV with Python Blueprints
- Elasticsearch Blueprints
- Python數據科學實踐指南