官术网_书友最值得收藏!

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所示。

2d37

圖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所示。

2d38

圖2-38 可選參數

2.9.2 函數間的數據傳遞

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

p69

【形參和實參】

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所示。

2d39

圖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所示。

2d40

圖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所示。

2d41

圖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所示。

2d42

圖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所示。

2d43

圖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所示。

2d44

圖2-44 取消引用

p75-1

【變量函數和引用函數】

主站蜘蛛池模板: 灵石县| 巨鹿县| 时尚| 龙里县| 车致| 长垣县| 北海市| 慈溪市| 朝阳区| 宿州市| 榆林市| 黑水县| 静宁县| 大埔区| 大方县| 乌兰浩特市| 牟定县| 泽州县| 扶沟县| 抚顺市| 尖扎县| 和林格尔县| 黔南| 溧水县| 三江| 华安县| 洮南市| 溧水县| 平潭县| 龙口市| 庄浪县| 正镶白旗| 大关县| 嫩江县| 三原县| 徐水县| 桑植县| 新泰市| 卫辉市| 忻城县| 阳江市|