PHP 函數
PHP 的真正威力源自於它的函數。
什麼是函數
我們在先前的學習中已經使用過大量的函數:var_dump、sprintf以及非常多的數組函數,他們的特徵是什麼?
• 都可以執行一些特定的功能
• 有特殊的名稱
• 函數都會有回傳值,即使沒有也會執行特定的運算
• 不需要知道函數內部的實作邏輯
函數存在於大多數的程式語言中,它們被用來分隔哪些能夠完成獨立明確任務的程式碼。
函數名稱必須以字母或底線開頭,後面跟著字母、數字或底線,另外函數名稱是大小寫不敏感的
什麼是函數參數我們可以把函數想像成一個榨汁機,參數就好比是我們投放進去的水果,而函數中執行的程式碼就好比是攪拌機的攪拌
參數不同,函數傳回的結果也不同,就像投放了橘子後不會出蘋果汁一個道理。函數也可以接受多個參數,就好比是混合果汁
函數只留給我們函數名來調用,而我們無需了解函數裡的程式碼是如何定義的,同樣,我們也不需要了解榨汁機裡的工作原理
PHP 內建函數在PHP 中,提供了超過1000 個內建的函數。
如需查看所有陣列函數的完整參考手冊和實例,請造訪我們的 PHP 參考手冊。
PHP 函數在本章中,我們將為您講解如何建立自己的函數。
如要在頁面載入時執行腳本,您可以把它放到函數裡。
函數是透過呼叫函數來執行的。
你可以在頁面的任何位置呼叫函數。
建立 PHP 函數函數是透過呼叫函數來執行的。
語法
function 函數名稱(參數1, 參數2, 參數3 …) {
程式碼/語句;
# return 回傳值;
}
PHP的函數不一定要明確保留return語句,如果沒有return,函數會自動回傳null
PHP 函數準則:
·函數的名稱應該提示它的功能
· 函數名稱以字母或底線開頭(不能以數字開頭)
實例
一個簡單的函數,在其被呼叫時能輸出我的名稱:
<html> <body> <?php function writeName() { echo "Kai Jim Refsnes"; } echo "My name is "; writeName(); ?> </body> </html>
PHP 函數 - 新增參數
為了給函數增加更多的功能,我們可以加入參數。參數類似變數。
參數就在函數名稱後面有一個括號內指定。
實例1
下面的實例會輸出不同的名字,但姓氏是相同的:
<html> <body> <?php function writeName($fname) { echo $fname . " Refsnes.<br>"; } echo "My name is "; writeName("Kai Jim"); echo "My sister's name is "; writeName("Hege"); echo "My brother's name is "; writeName("Stale"); ?> </body> </html>
實例2
下面的函數有兩個參數:
<html> <body> <?php function writeName($fname,$punctuation) { echo $fname . " Refsnes" . $punctuation . "<br>"; } echo "My name is "; writeName("Kai Jim","."); echo "My sister's name is "; writeName("Hege","!"); echo "My brother's name is "; writeName("Ståle","?"); ?> </body> </html>
PHP 函數- 傳回值
如需讓函數傳回一個值,請使用return 語句。
實例
<html> <body> <?php function add($x,$y) { $total=$x+$y; return $total; } echo "1 + 16 = " . add(1,16); ?> </body> </html>
自訂函數
我們之前呼叫的都是PHP內建的函數。但是,程式語言真正的功能是透過創建自己的函數來實現的
PHP提供的函數大多是基礎的功能,譬如操作數組、存取資料庫、讀寫檔案等
但是,在現實專案中,PHP函數是無法滿足我們的需求的,我們找不到可以用來處理合約的函數、沒有計算出勤率的函數、沒有列印資料表格的函數
幸運的是,我們不僅限於PHP內建函數,我們可以編寫自己的函數來完成任何任務,這就是自訂函數。可以在自訂函數中使用PHP的內建函數,下面我們來了解函數的基本結構.
一次函數
在電腦中,函數最早是用來模擬各種數學函數的,看下面的程式碼
function linear($x) {
$k = 5 ;
$b = 3;
$y = $k * $x + $b;
return $y;
}#o
此函數可以解一次方程式
• 函數為黑盒,且linear內部的任何變數外部都無法存取
• 同樣,函數內部也無法存取外部的變數
• 外部傳遞資料給函數使用參數
• 函數傳回資料給外部使用返回值
#函數的預設值回顧函數的語法,只要稍作修改,給第二個參數後面加上等號,並且賦值,則參數2就有了預設值,函數呼叫時只需要傳遞一個參數function 函數名稱(參數1, 參數2 = 1) {
程式碼/語句; return 傳回值;}函數名稱(1);此時函數體內參數2的值為1(預設值)函數名稱(1, 2);此時函數體內參數2的值是2(傳遞的值) #預設值的作用
在實際的開發中,我們常用到它,為什麼?
假設有一個系統函數,已經使用了很久,到處都有調用它的地方,如果需要添加新的邏輯,很有可能需要給它添加一個新的參數
如果新增了新參數,這時函數的定義改變了,我們需要找到每個呼叫的地方去修改並增加這個參數
如果給個預設值呢?預設值用來控制關閉新的邏輯,這樣原先的程式碼不用做任何修改也不會執行到新的邏輯,而新的程式碼,可以顯示的指定參數開啟新的邏輯