php函數(一)

(一)基本使用

函數定義形式

function 函數名(形參1,形參2,……){

  函數體

}

函數調用形式

    1.沒有返回值的函數,調用語句是獨立語句

      函數名(實參1,實參2,…);

    2.有返回值的函數,將調用語句當作一個“數據”使用

      $v1=函數名(實參1,實參2,…);

$v1=函數名(實參1,實參2,…)*3+6;//參與運算

echo 函數名(實參1,實參2,…);//直接輸出

echo 函數名(實參1,實參2,…)*3+6;

$v1=函數名(函數名(),實參1,實參2,…);//可當實參使用

函數調用流程分析

開始調用:實參傳數據給形參

程序執行流程進入到函數中(一個獨立的運行空間),跟全局執行空間是隔離的

按常規邏輯執行函數中的代碼

如果碰到return語句,則終止函數的執行,調回函數開始調用的位置

如果執行到函數最後位置,也同樣跳會函數開始調用的位置

(二)函數參數

函數定義時:形參

   只在該函數中有效的變量名,函數結束,通常這些變量會銷燬

調用時:實參

  可以是一個實際數據(5,abc),也可以是一個變量,其作用是將數據賦值給形參

實參與形參一一對應

參數的默認值

定義一個函數時,在形參的位置,可以給形式參數設定默認值

默認值不能是對象或資源類型,只能是常量表達式,或常量,不能是變量。

調用函數時,如果給有默認值的形參傳值,則使用傳來的數據,不給傳數據,則使用默認值

示例:functiongetArea($v,$pi=3.14){ 函數體}

函數的參數傳值問題

值傳遞,引用傳遞(在形參前加&,實參形式不變

引用傳遞時,實參只能是一個變量,引用傳值的形參變量,在函數內部改變該形參變量的值,則對應實參變量的值也就改變

函數的數量問題

實參與形參一一對應,如果形參有默認值,實參可以省略

特殊情況:自由參數數量

   定義時不給定形參,但調用時,又可以給定任何個數的實參

類似於var_dump()可以傳遞不定個數的參數:

   var_dump($v1);

   var_dump($v1,$v2);

這種應用的實現,依賴於系統中的3個系統函數:

func_get_args();//獲得一個函數所接收到的所有實參數據,結果是一個數組

func_get_arg(n);//獲得一個函數所接收到的第n個實參數據(n從0開始)

func_num_args();//獲得一個函數所接收到的所有實參數據的個數

示例:

  function getSum()

{

$arr=func_get_args();

$sum=0;

foreach($arr as$value){

$sum+=$value;

}

return $sum;

}

$he1=getSum(1,2);

$he2=getSum(1,2,3);

(三)函數的返回值

使用return語句,其後帶一個數據(直接數據、變量數據、表達式結果數據),再返回到該數據的“調用位置”。

通常情況下,函數返回的數據都是以“值傳遞”的形式,還可以使用引用返回(&)的形式來定義一個函數的返回值形式。形式如下:

function &函數名(形參1,形參2,……)//注意函數名前有個引用符號“&”

{

 static  $result=0; //初始化(定義爲靜態變量後,不會隨着函數結束而銷燬,會持有該值,而且第二次及以後再調用該函數,也不會初始化了)

   ……

   return $result;//返回數據,只能是變量

}

調用函數:$v1=&函數名(實參1,實參2,……)//引用返回的函數,有返回值(即v1與result指向同一個數據)

(四)函數的其他形式

可變函數

可變函數,即函數名“可變”,與可變變量原理相同

$str1=”f1”; //只是一個字符串,內容爲“f1”

$v1=$str1(3,4);//形式上看起來是一個變量後面加一個括號,本質是該變量的內容(f1)後面加括號,即這裏是調用函數 f1(3,4);

實際應用中,需要根據“用戶給定”的數據,來決定調用哪一個函數,比如:

function jpg(){處理jpg圖}

function png(){處理png圖}

function gif(){處理gif圖}

$fileName=get filename(){獲取用戶上傳的圖片名}

$houzhui=get_houzhui($fileName);

$houzhui();

匿名函數

匿名函數就是沒有名字的函數,有兩種形式:

表現1:

 $f1=function(){…函數體;}//這裏的匿名函數定義形式上沒有名字,但其實將其賦值給變量$f1

使用時,與“可變函數”一樣:$v1=$f1( );

表現形式2:

調用其他函數(匿名函數,實參1,實參2,。。。)

說明:

  此形式的匿名函數只有定義的函數體(無函數名),只能作爲其他函數調用時的參數,會在調用其他函數的“過程中”被執行。

能夠使用(匿名)函數當作實參的函數,並不多!

其中一個常見的是:call_user_func_array();

其形式爲:

call_user_func_array(匿名函數,數組);

含義:將數組的每一項當作匿名函數的實參,傳遞到該匿名函數中,並執行該匿名函數,可以從匿名函數中返回數據。

示例1:

    call_user_func_array(function($m1,$m2){

echo “m1=$m1,m2=$m2”;

},array(1,2));

示例2:

$a1=array(1,2,3);

$func1=function(){

$a=func_get_args();

$sum=0;

foreach($a as $value){

$sum+=$value

}

return $sum;

}

$s= call_user_func_array($func1,$a1);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章