php函數文法定義執行個體詳解

來源:互聯網
上載者:User
函數是完成一個特定功能的代碼集合,可以分為系統函數和使用者函數。使用者可以通過建立自訂函數實現特定需要。

1.函數定義文法結構:

PHP中允許使用者使用function關鍵字建立一個自訂函數。文法結構:
function 函數名稱(參數1, 參數2, ...)
{
//函數內的代碼
}
PHP對函數名稱的限制比較少,可以是以字母或底線開頭後跟字母、底線或數位任何字串,而且不區分大小寫。括弧內是函數的參數,多個參數間用逗號分隔,沒有參數時括弧也不能省略。大括弧內是函數體,在函數體內使用return語句可以指定函數的傳回值。樣本:

function format_Html($text){$text=”<u><i><b>$text</b></i></u>”; //應用加粗、斜體和粗體標記 echo $text; //輸出格式化後的字串 }

2.使用函數:

使用者函數建立之後,便可以像系統函數一樣使用,即通過指定函數名稱來調用。如果該函數需要參數,需要在小括弧內指定參數的值,注意參數的類型應與定義時一致。
在調用使用者自訂函數時,必須確保之前函數已經存在,即函數應先定義再調用。樣本:

<table cellspacing=0 cellpadding=0 width”511” border=0>   <tr> <td width=”70” height=22>產品名稱:</td> <td width=”292” height=22 class=”title”><?php format_Htmi(“企業管理系統”); ?></td>   </tr> </table>

3.函數傳回值:

有時需要在程式外部使用函數執行的結果,這時就需要在函數內使用return語句指定一個傳回值。使用return語句可以為函數返回任何類型的資料。樣本:

<?php function getDataAry(){$resAry=array(95,87,79,80,62,74,90,92); //建立一個數組 return $resAry; //返回該數組 } $ary=getDataAry(); //儲存函數返回的數組 foreach ($ary as $i) echo $i.”,“; //遍曆數組,輸出所有數 ?>

4.函數參數傳遞方式:

PHP支援的參數傳遞方式有:按值傳遞、按索引傳遞、預設值傳遞和可變參數列表傳遞。

1)按值傳遞:

按值傳遞是PHP預設的參數傳遞方式。這種傳遞方式將為函數外部變數的值建立一個副本,然後賦給函數內部的局部變數。在函數處理完成後,該外部變數的值不發生改變,除非在函數內部聲明該外部變數範圍為全域。樣本:

<?php function PassByValue($number, $str){ //按值傳遞參數 $number+=100; //第一個參數增加100 $str.=” World”; //第二個參數附加World字串 echo “函數內\$number=”,$number, “, \$str”, $str, “<br>”; //輸出參數 } $number=3; //建立一個整數作為第一個參數 $str=”hello”; //建立一個字串作為第二個參數 PassByValue($number, $str); //調用 echo “函數外\$number=”,$number, “, \$str”, $str, “<br>”; //輸出調用兩個參數的值 ?>

輸出結果為:
函數內$number=103, $str=hello World
函數外$number=3, $str=hello
可見,PHP按值傳遞參數,在函數範圍內對這些值的任何改變在函數外部都會被忽略。

2)按引用傳遞:

在按引用傳遞參數方式下,實參的記憶體位址被傳遞到形參中,在函數內部對形參的任何修改都會影響到實參,因為它們被儲存到同一個記憶體位址。函數返回後,實參的值將會發生改變。引用傳遞參數的形參和實參都是針對同一個塊地址修改。如果希望一個函數參數通過引用被傳遞,需要在函數定義的參數名前添加符號&來實現。樣本:

<?php function PassByValue(&$number, &$str){ //按引用傳遞參數 $number+=100; //第一個參數增加100 $str.=” World”; //第二個參數附加World字串 echo “函數內\$number=”,$number, “, \$str”, $str, “<br>”; //輸出參數 } $number=3; //建立一個整數作為第一個參數 $str=”hello”; //建立一個字串作為第二個參數 PassByValue($number, $str); //調用 echo “函數外\$number=”,$number, “, \$str”, $str, “<br>”; //輸出調用兩個參數的值 ?>

輸出結果為:
函數內$number=103, $str=hello World
函數內$number=103, $str=hello World
可見,使用通過引用傳遞參數的方式時,在函數內對這些值的任何改變,在函數之外也能反映出這些修改。

3)預設值傳遞:

除了按值傳遞參數和按引用傳遞參數的方式外,一個函數還可以使用預先定義好的預設參數。在未指定參數的情況下,函數使用預設值作為函數的參數;在提供了參數的情況下,函數使用指定的參數。樣本:

<?php function setFontColor($str, $color=”red”){ //建立帶預設值的參數 echo “<font color=’ “.$color.”’.”.$str.”</font></br>”;} setFontColor(“教程”); //使用參數的預設值 setFontColor(“熱門商品”, “black”); //修改參數的預設值 ?>

可見,調用函數時,可以傳遞兩個參數,也可以傳遞一個參數。如果只傳遞一個參數,則第二個參數使用建立函數時定義的預設值。
在使用PHP的預設參數時需要注意,預設值必須是常量運算式,不能是變數。如果函數有多個參數,可以為多個參數指定預設值。但是,帶預設值的參數只能位於參數列表的最後,即一個預設值參數的右邊不能出現沒有指定預設值的參數。

4)可變參數列表傳遞:

即參數的數量是不確定的。這種方式需要藉助3個特殊的函數擷取傳入的參數,如下表。

func_num_args() func_num_args(void) 返回自訂的函數中傳入的參數個數

func_get_arg() func_get_arg($arg_num) 取得第$arg_num+1個參數的值

func_get_args() func_get_args(void) 返回一個包含所有參數的數組

樣本:建立一個函數實現對調用時傳遞的任意數量的數字進行排序並輸出

<?php function sortNumbers(){ //排序函數 $count=func_num_args(); //擷取實際傳遞的參數個數 $ary=func_get_args(); //擷取所有參數列表的數組 rsort($ary); //對數組進行排序 echo “本次排序的共有$count個數字,結果如下:\n”;foreach ($ary as $n) echo ” $n“; //輸出排序後的數字 echo ” \n“; } sortNumbers(3, 5, 2, 56, 74, 82, 53, 66, 79, 46); //排序10個數 sortNumbers(59, 26, 46, 31, 89, 47); //排序6個數字 ?>

建立函數時沒有參數,在函數內使用func_num_args()函數獲得實際調用時參數的數量並儲存到變數中,使用func_get_args()函數獲得所有傳遞的參數,並以數組形式儲存到變數中。

5.遞迴函式:

遞迴函式,是指在一個函數的函數體內調用函數本身。在遞迴函式中,主調函數又是被調函數,遞迴函式反覆調用其自身,每調用一次進入新的一層。樣本:

<?php function sum($number) //遞迴函式 {if($number!=0) //判斷是否停止遞迴 { return $number+sum($number-1); //在傳回值中調用本函數 }} echo ” 100求和結果:“.sum(100); //輸出求和結果 ?>

遞迴函式只需要少量的程式即可描述出解題過程所需要的多次重複計算,大大減少了程式的代碼量。但是,必須為遞迴函式設定停止條件,否則會造成死迴圈。

6.嵌套函數:

嵌套函數是指在一個函數體中又同時定義一個函數,兩個函數形成嵌套關係。此時只有外部函數被調用後,內建函式才能使用。樣本:

<?php function start() //外部函數 {echo ”正在開機...\n“; function boot() //內建函式 { echo ”正在載入引導程式...\n“;}function welcome($user) //內建函式 { echo ”歡迎[$user]使用本系統。\n“;}} start(); //調用外部函數,此時內建函式均變得可用 boot(); welcome(“dwenzhao”); ?>

上述代碼定義了3個函數,start()是外部函數,其中包含了boot()和welcome()兩個函數。因此,為了使用boot()和welcome()函數,必須先調用start()函數,否則將提示函數未定義。

7.判斷函數是否存在:

開發大型項目時通常是多人協作,這時就要避免自訂函數名稱存在的情況。PHP中可以使用function_exists()函數判斷指定的使用者函數是否已經存在。樣本:

<?php if(!function_exists(“userLogin”)) //判斷userLogin()函數是否存在 {function userLogin($u) //如果不存在則建立 { echo ”使用者$u登入成功“;}} userLogin(“dwenzhao”); //調用userLogin函數 ?>

還可以使用create_function()函數建立一個臨時函數,這個函數名稱由PHP動態產生,從而避免名稱相同的情況。樣本:

<?php if(!function_exists(“userLogin”)) //判斷userLogin()函數是否存在 {function userLogin($u) //如果不存在則建立 { echo ”使用者$u登入成功“;}} $userLogin=create_function(‘$u’, ‘echo  ”使用者$u登入成功“;’);echo  $userLogin(“dwenzhao”); ?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.