第6天 函式的使用及有關定義
函式的基本使用
函式定義形式:
function函式名(形參1,形參2,。。。){
//函式體
}
函式呼叫形式:
本質上就是使用一個名字來達到執行其中函式程式碼的作用。通常可以分為兩種情形的
呼叫:
1.沒有返回值的呼叫,呼叫語句是獨立語句。
函式名(實參1,實參2,……);//實參個數應該和形參有匹配性。
2.有返回值得函式,則呼叫語句通常會會在在別的語句中,並將該呼叫語句
當做一個數據來使用。
A:$v1 =函式名(); //賦值給其他變數
B:$v2 =函式名()×3+6//參與運算,然後在賦值
C:echo函式名()
D:echo函式名()*3+6
//
E:$v1 =函式名2(函式名(),實參2,實參3,。。。)//當做實參使用
函式呼叫流程分析:
1.開始呼叫,實際引數出資料給形式引數。
2.程式執行流程進入到函式中(一個獨立的執行空間),跟全域性之星空間是隔離的。
3.按照常規的程式邏輯執行函式中的程式碼。
4.如果碰到return語句,則終止函式的執行,返回函式開始呼叫的地方。
5.如果執行導函式的最後位置,同樣也會回撥到開始呼叫函式的位置。
函式引數分為形式引數和實際引數。
一個函式子啊定義時,有形式引數。
形參是一個變數名
該變數名只能是在該函式中有效的變數名。
而且只在該函式呼叫並且執行時有效,函式結束,變數通常銷燬。
在呼叫時,當做實際引數。
實際引數可以是一個直接資料,也可以是一個變數中儲存的資料。
實際引數應該和形參有一個11對應的關係。
定義形式:function函式名(形參1,形參2,。。。。){。。。}
呼叫形式:函式名(實參1,實參2,。。。)
預設值引數:
<?php
#定義一個函式計算圓的面積,$pi就是預設引數。 function getArea($r, $PI= 3.14){ $result = $r*$r*$PI; return $result; } $a1 = getArea(1, 3.1416);#計算半徑為1,pi3.1416的半徑 $a2 = getArea(1);#第二次呼叫時沒有傳遞$PI得值 echo "$a1"; ?> 注意: 預設值不能使物件或者資源型別。 預設值只能是常量表達式,或者常量,不能使變數 例如:function f1($v1=3+1){}, function f2($v2 = $v3) 都是錯誤的 函式的引數處安置問題 預設都是值傳遞。 引用傳遞的形參(實參),在函式內部改變其值,在函式外部也會發生修改。
#注意這裡&$r是引用傳遞 $m1 = 10; function getArea2(&$r, $PI= 3.14){ $result = $r*$r*$PI; $r ++;//這裡$m1會變成11 return $result; } $a3 = getArea2($m1); echo "m1:$m1";//輸出11 注意:當某個形參設定為引用傳遞,此時實參只能使用變數,否則會出現語法錯誤。
$m1=10;
function getArea2(&$r, $PI= 3.14){ $result = $r*$r*$PI; $r ++;//這裡$m1會變成11 return $result; } $a3 = getArea2(23);//這裡會出現錯誤 Fatal error: Only variables can be passed by reference in /var/www/html/day6/hanshujichu.php on line 26 引數的數量問題: 1.函式的引數的數量可以是多個,具體由需要決定。 2.通常實際引數的數量應該和形式引數的數量一致。 3.但是當有預設引數時,可以不遵循第2條 即:實參的個數不少於形參中非預設引數值的個數。 4.特殊的處理引數:自有引數數量 定義時可以不給定形參,但呼叫時,卻又可以給定任何數量的實參。 在系統中,var_dump()這個函式也具有同樣的使用效果。 var_dump($v1); var_dump($v1,$v2);
這種應用的實現,是依賴系統中的三個系統函式來達到的。
func_get_args()//獲取所有傳遞過來的實際引數,結果是一個數組
func_get_arg(n)//獲得第n個引數(n從0開始)
func_num_args()//獲得所有實際引數的個數。
例子:
<?php
//不定形參個數的特殊函式的使用例項 //求偌幹個數的和 function getSum(){ $arr = func_get_args();//獲得所有的實參,結果是陣列 $sum = 0;//初始化一個變數,用於儲存總和 foreach ($arr as $key=>$value){ $sum += $value; } return $sum; } $sum_total = getsum(34, 53, 3423,5); echo "$sum_total"; ?>
返回值:
通常來說,在一個函式中,使用return語句
通常情況下,函式返回的資料都是以值傳遞的形式返回,函式中的變數的值拷貝一份,然後
返回給接受的位置的對應程式碼。
但是我們也可以用引用傳遞的方式返回。
定義函式:
function&函式名(形參1,形參2.。。。){
$result= 0;//初始化
return$result ;//此時返回的資料只能是變數}
呼叫函式:
$v1= &函式名(實參1,實參2,。。。);
應用返回的函式,自然是有返回值。
<?php
function &f1($p1, $p2){ static $result = 0; //定義為靜態變數,即不會隨著函式的結束而銷燬 //及以後在呼叫該函式,也不會初始化。 //第一次應該是0,第二次應該是6; echo "result=$result"; $h = $p1*$p1 + $p2*$p2; $result = pow($h, 0.5); return $result; } //這裡的引用,體現為$v1 和函式中的$result 指向同一個資料 $v1 = &f1(3,4); echo "v1=$v1";//應該是5 $v1++;//則按理來說,$result也自加了,但是這裡並不能體現出來。應該是6 $v2 = &f1(4, 5);//再呼叫一次,取函式中輸入$result;
輸出結果:
result=0 v1=5 result=6
函式的其他形式:
可變函式:
就是函式名字可變 – 其實跟可變變數一樣
$str1=‘f1’;//只是一個字串,內容為‘f1’
$v1= $str1(3,4);//形式上看起來像變數加括號,實際上是f1(3,4);
匿名函式:
表現1: