在呼叫函數時,需要向函數傳遞參數,被傳入的參數成為實參,而函數定義時的參數為形參。上一章節我們對php自訂函數的參數進行了實例講解,本章節就重點介紹一下函數間參數傳遞的3種方式:按照值傳遞 ,按引用傳遞和預設參數。
1.按值傳遞的方式
將實參的值賦值到對應的形參中,在函數內部的操作針對形參進行,操作的結果不會影響到實參,也就是函數回傳後,實參的值不會改變。值傳遞(pass-by-value)過程中,被調函數的形式參數作為被調函數的局部變數處理,即在堆疊中開闢了記憶體空間以存放由主調函數放進來的實參的值,從而成為了實參的一個複製。值傳遞的特徵是被調函數對形式參數的任何操作都是作為局部變數進行,不會影響主調函數的實參變數的值。
先定義一個函數example(), 功能是將傳入的參數值做一些運算後在輸出;接著在函數外部定義一個變數$m,也就是實參;最後一個呼叫函數example($ m)。分別在函數體內和體外輸出形參 $m 和 實參 $m 的值。
其實例程式碼如下的顯示:
<?php function example($m){ $m = $m + 10; echo "在函数内部:m = ".$m ."<br>"; //输出形参的值 } $m = 1; example($m); // 将实参$m的值传递给形参$m echo "在函数外部:m = ".$m; // 实参的值没有变化,$m = 1 ?>
函數的運行結果如下圖:
2. 依引用傳遞方式
依引用傳遞就是將實參的記憶體位址傳遞給形參。這時,在函數內部所有對形參的操作都會影響到實參的值。函數傳回後,實參的值會改變。引用傳遞方式就是函數定義時在形參前面加上 “ & ” 符號。在引用傳遞(pass-by-reference)過程中,被調函數的形式參數雖然也作為局部變數在堆疊中開闢了記憶體空間,但是這時存放的是由主調函數放進來的實參變數的位址。被調函數對形參的任何操作都被處理成間接定址,即透過堆疊中存放的位址存取主調函數中的實參變數。正因如此,被調函數對形參做的任何操作都影響了主調函數中的實參變數。
程式碼範例如下:
<?php function example(&$m){ //定义一个函数,同时传递参数$m的地址 $m = $m + 10; echo "在函数内部:m = ".$m ."<br>"; //输出形参的值 } $m = 1; example($m); // 将实参$m的地址传递给形参$m echo "在函数外部:m = ".$m; // 实参的值发生了变化,$m = 11 ?>
函數的運行結果如下圖:
3. 預設參數(可選參數)
#還有設定參數的方式,即可選參數。可以指定某個參數為可選參數,將可選參數放在參數清單末尾,並且指定其預設值為空。
應用一個範例使用可選參數實作一個簡單的價格計算功能。設定自訂函數 values 的參數 $tax 為可選參數,其預設值為空。 第一次呼叫函數,並且給參數 $tax 賦值,輸出價格;第二次呼叫函數,不給參數複製,輸出價格。
其程式碼如下所示:
<?php function value($price, $tax=""){ //定义一个函数,第二个参数为空 $price = $price*$tax; echo "价格:$price<br>"; //输出价格 } value(10,5); // 为可选参数赋值5 value(10); // 没有给可选参数赋值 ?>
輸出結果為:
價格:50
價格:0
注意:當使用預設參數時,預設參數必須放在非預設參數的右側,否則函數可能出錯。
說明:從PHP5 開始,預設值也可以透過引用傳遞。下面一章將介紹什麼是自訂函數的回傳值。
【相關教學推薦】
3. php實戰影片教學
以上是php自訂函數的參數在函數間傳遞的三種方式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!