函式就是將一些重複使用的功能寫在一個獨立的程式碼塊中,在需要的時候單獨呼叫。
一、定義和呼叫函式function fun_name($str1,$str2......)
{
fun_body
}
function 宣告自定義函式的必須使用的關鍵字
fun_name 自定義函式的名稱。
$str1,$str2 為自定義函式的引數。
fun_body 自定義函式的主體,功能實現的部分。
呼叫函式:引用函式名並賦予正確的引數
例如:
<?php function method($a) { return "$a x $a =".$a * $a; } echo method(5);?>輸出結果:5 x 5 = 25
二、在函式間傳遞引數呼叫需要傳遞引數,被傳入的引數叫實參,在函數里定義的引數的形參。函式間的引數的傳遞方式有按值傳遞、按引用傳遞、預設引數3種方式。
1、按值傳遞方式
將實參的值賦值都對應的形參中,在函式內部的對形參進行操作,操作的結果並不會影響到實參,也就是函式執行後實參的值不會改變。
例如:
<?php function method($a){ $a = $a+3; echo "在函式內\$a的值是:".$a; } $a = 2; method($a); echo "<br/>"; echo "在函式外\$a的值是:".$a;?>輸出結果:在函式內$a的值是:5在函式外$a的值是:2
2、按引用傳遞方式
按引用傳遞就是將實參的記憶體地址傳遞給形參。這時候函式內部的對形參的操作都會影響到實參的值。在函式執行後實參的值將會發生改變。
引用傳遞的方式是函式定義後在形參前面加一個“&”的符號。
例如:
<?php function method(&$a){ $a = $a+3; echo "在函式內\$a的值是:".$a; } $a = 2; method($a); echo "<br/>"; echo "在函式外\$a的值是:".$a;?>輸出結果:在函式內$a的值是:5在函式外$a的值是:5
3、預設引數(可選引數)
可以指定某個引數是可選引數,將可選引數放在引數列表末尾,並且指定其預設值是什麼(可以是空的或者其他資料型別的值)。
例如:
<?php function method($a,$b="",$c=2){ $a = $a+($a*$b+$c); echo "輸出:$a <br/>"; } method(10); method(10,2); method(10,2,10);?>輸出結果:輸出:12輸出:32輸出:40
三、函式的返回值函式如果有返回值需要使用關鍵字reurn 或者 return()函式。如果在全域性作用域使用了return關鍵字,那麼將終止指令碼的執行。
例如:
<?php function method($a){ return $a+$a; } echo method(1);?>輸出結果:2
return 語句只能返回一個運算元,也就是隻能返回一個值,不能一次返回多個值。如果需要返回多個值,可以在函式中定義一個數組,將返回值儲存在陣列中返回。
四、變數函式來看一個例子:
<?php function eat(){ echo "吃飯<p>"; } function drink($name="Tom"){ echo "$name 在喝水 <p>"; } function tea($a){ echo "$a 在喝茶 <p>"; } $a = "eat"; $a(); //呼叫函式eat $a = "drink"; $a("Jerry"); //呼叫函式drink $a="tea"; $a("Jack"); //呼叫函式eat?>輸出結果:吃飯Jerry 在喝水Jack 在喝茶
這個例子我們可以發現變數函式的呼叫可以透過改變變數名就可以實現的,變數名加小括號php 自動尋找和變數名相同的函式,並且執行它。如果找不到對應的函式,系統將會報錯。透過這個方式,我們可以用於實現回撥函式和函式表等。
五、對函式的引用前面我們說函式的引數傳遞可以使用引用傳遞的方式修改實參的內容。引用不僅可以用於普通變數、函式引數,也可以用於函式本身。對函式的引用,就是對函式返回結果的引用。
例如:
<?php function &method($a=0){ $a = "我在$a"; return $a; } $s = &method("捉迷藏"); echo $s;?>輸出結果:我在捉迷藏
注意:和引數引用傳遞不同,對函式的引用必須在兩個地方都使用“&”符號,用來說明返回的是一個引用。
六、取消引用當不需要引用的時候,可以取消引用。取消引用使用unset()函式。它只是斷開了變數名和變數內容之間的繫結,而不是銷燬變數內容。
例如:
<?php $a = 1234; $b = &$a; echo "\$b:".$b."<p>"; unset($b); echo "\$b:".$b."<p>"; echo "\$a:".$a."<p>";?>輸出結果:$b:1234$b:$a:1234
下節預告:php的編碼規範