1. 程式人生 > >第6天 函式的使用及有關定義

第6天 函式的使用及有關定義

函式的基本使用

函式定義形式:

function函式名(形參1,形參2,。。。){

//函式體

}

函式呼叫形式:

本質上就是使用一個名字來達到執行其中函式程式碼的作用。通常可以分為兩種情形的

呼叫:

1.沒有返回值的呼叫,呼叫語句是獨立語句。

函式名(實參1,實參2,……);//實參個數應該和形參有匹配性。

2.有返回值得函式,則呼叫語句通常會會在在別的語句中,並將該呼叫語句

當做一個數據來使用。

A:$v1 =函式名(); //賦值給其他變數

B:$v2 =函式名()×3+6//參與運算,然後在賦值

C:echo函式名()

Decho函式名()*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);#計算半徑為1pi3.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個引數(n0開始)

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