1
2
3
4
5
6
7
8
9
10
11

自定義函數

發(fā)布時間:2017-07-20 07:57   發(fā)布人:毛書朋   浏覽次數:7374


關聯課件: 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.jpg

圖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.jpg

圖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.jpg

圖4-21  程序4-24.php的運行結果



  • 趙博文 2018-01-07 16:02:25
    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; } }
  • 趙博文 2018-01-07 16:02:54
    使用方法如下: //以下是將(jiāng)字符串“Helloweba歡迎您”分别加密和解密 //加密: echo encryptDecrypt('password', 'Helloweba歡迎您',0); //解密: echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1);
  • 嶽猛 2018-01-09 16:23:23
    講的條理清晰,聽起(qǐ)來非常的流暢
  • 甄丹丹 2018-01-09 16:29:48
    這(zhè)些語法基礎對(duì)于剛學(xué)習PHP的人來說是非常重要的,條理清晰,方便學(xué)習
  • 李倩文 2018-01-10 11:57:22
    在調用函數時,要填入與函數形式參數個數相同的實際參數(有默認參數的除外),在程序運行過(guò)程中,實際參數就會傳遞給相應的形式參數,然後(hòu)在函數中實現對(duì)數據的處理和返回。實際參數向(xiàng)形式參數傳遞的過(guò)程中,共有值傳遞、引用傳遞、默認參數3種(zhǒng)機制。