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

2.8 PHP函數

函數就是可以完成某個工作的代碼塊,它就像小朋友搭房子用的積木一樣,可以反復使用,在使用的時候不用考慮它的內部組成。PHP函數可以分為兩類,第一類是內置函數,即PHP自身函數,只需要根據函數名調用即可。PHP備受歡迎的一個原因就是擁有大量的內置函數,包括字符串操作函數和數組操作函數等。例如var_dump()函數就是輸出變量的函數。第二類是自定義函數,就是由用戶自己定義的、用來實現特定功能的函數。內置函數可以通過查閱PHP開發手冊來學習,下面講解自定義函數。

2.8.1 定義和調用函數

創建函數的基本語法格式為:

上述代碼的參數說明如下。

? function:聲明自定義函數時必須使用到的關鍵字。

? fun_name:自定義函數的名稱。

? $str1,$str2,…,$strn:函數的參數。

? fun_body:自定義函數的主體,是功能實現部分。

當函數被定義好后就要調用這個函數。調用函數的操作十分簡單,只需要引用函數名并賦予正確的參數即可完成函數的調用。

例如,定義了一個函數example(),計算傳入的參數的平方,然后連同表達式和結果全部輸出。代碼如下:

結果如下:

學習筆記

如果定義了一個函數,但是從未調用這個函數,那么這些代碼將不會執行。

2.8.2 在函數間傳遞參數

在調用函數時,有時需要向函數傳遞參數,參數傳遞的方式有按值傳遞、按引用傳遞和默認參數。

1. 按值傳遞

按值傳遞是常用的參數傳遞方式,將調用者括號內的值依次傳遞給函數括號內的值。從下面的例子中驗證函數接收參數的順序。代碼如下:

運行結果如下:

2. 按引用傳遞

按引用傳遞就是將參數的內存地址傳遞到函數中。這時,在函數內部的所有操作都會影響到調用者參數的值。按引用傳遞就是傳遞參數值時在原基礎上加&號即可。

下面舉例說明按值傳遞和按引用傳遞的區別。

? 按值傳遞:張三和李四是同事,張三有一間獨立的辦公室,張三給李四提供建筑材料,李四也建造了一個跟張三一模一樣的辦公室,他們倆在各自的辦公室辦公,彼此獨立。

? 按引用傳遞:由于公司工費緊張,將李四安排到張三的辦公室。二人各有一把鑰匙,公用辦公室的資源,張三和李四就會相互影響。

例如,下面的代碼中,在第一個參數前添加一個&號。

運行結果如下:

從運行結果中可以看出,第一個參數&$parameter1使用引用傳遞后,函數體內改變$parameter1的值,調用者的參數$number1也相應改變,而$number2和$number3的值則沒有改變。

3. 默認參數(可選參數)

還有一種設置參數的方式,即默認參數。可以指定某個參數為默認參數,將默認參數放在參數列表末尾,并且給它指定一個默認值。

例如,使用默認參數實現一個簡單的價格計算功能,設置自定義函數values的參數$tax為默認參數,其默認值為空。第一次調用該函數,給參數$tax賦值0.25,輸出價格;第二次調用該函數,不給參數$tax賦值,輸出價格。代碼如下:

結果如下:

學習筆記

當使用默認參數時,默認參數必須放在非默認參數的最右側,否則函數可能出錯。

2.8.3 從函數中返回值

我們已經知道,可以向函數發送信息(參數),不過函數還可以向調用者發回信息。從函數中返回的值稱為結果(result)或返回值(return value)。函數將返回值傳遞給調用者的方式是使用關鍵字return。return將函數的值返回給函數的調用者,即將程序控制權返回到調用者的作用域。

計算購物車中商品總價

本實例將模擬淘寶購物車功能,并計算購物車中商品總價。購物車中有如下商品信息:

手機單價5000元,購買數量2臺;電腦單價8000元,購買數量10臺。

操作步驟為:先定義一個函數,將其命名為total,該函數的作用是輸入商品的單價和數量,然后計算商品總金額,最后返回商品總金額。代碼如下:

上述代碼的結果如下:

return語句一次只能返回一個參數,即只能返回一個值,不能一次返回多個值。如果要返回多個值,就要在函數中定義一個數組,將返回值存儲在數組中返回。

2.8.4 變量作用域

你可能注意到,有些變量在函數之外,有些變量則在函數之內,它們必須在有效范圍內使用,如果變量超出有效范圍,則變量也失去意義了。變量的作用域如表2.11所示。

表2.11 變量的作用域

在函數內部定義的變量,其作用域為所在函數,如果在函數外賦值,將被認為是完全不同的另一個變量。在退出聲明變量的函數時,該變量及相應的值就會被清除。

比較局部變量和全局變量

比較在函數內賦值的變量(局部變量)和在函數外賦值的變量(全局變量),代碼如下:

運行結果如圖2.7所示。

圖2.7 輸出局部變量和全局變量

主站蜘蛛池模板: 云梦县| 揭东县| 保德县| 厦门市| 海丰县| 沅陵县| 景德镇市| 云浮市| 紫云| 云阳县| 徐水县| 蓝田县| 安庆市| 乐清市| 巴林右旗| 封开县| 丹棱县| 绥江县| 三江| 东海县| 中超| 海城市| 水富县| 湘乡市| 南雄市| 洪江市| 漯河市| 米泉市| 南木林县| 潮州市| 普安县| 夹江县| 安阳县| 鄂尔多斯市| 石渠县| 海原县| 沁水县| 太原市| 昌乐县| 荃湾区| 枞阳县|