1. 程式人生 > >PHP基礎入門(二)【PHP函數基礎】

PHP基礎入門(二)【PHP函數基礎】

就是 進行 size 自定義 取地址 代碼 功能 sha 有一種

PHP基礎入門(二)——函數基礎

了解 PHP基礎入門詳解(一) 後,給大家分享一下PHP的函數基礎。

這部分主要講的就是: 函數的聲明與使用、PHP中變量的作用域、靜態變量、函數的參數傳遞、變量函數、回調函數、匿名函數、include&require、PHP閉包

PHP的函數基礎↓↓↓

一、函數的聲明與使用

1、標識符:程序中的變量名,屬性名,方法名,函數名,類名統稱為標識符;
  ① 標識符的命名要求:
   只要是標識符,命名就只有字母、數字、下劃線組成,開頭不能是數字;
  ② 標識符的命名規範:
   類名:要符合"大駝峰法則",每個單詞的首字母全部大寫!PersonName


   其他標識符:符合"小駝峰法則"。首字母小寫,之後每個單詞的首字母大寫。 myNameIsHang
   或者使用匈"牙利命名法",所有字母小寫,單詞之間用下劃線分隔。 my_name_is

2、函數名的要求:
  ① 函數名也是標識符之一。符合標識符的要求與規範。
  ② 函數名不區分大小寫。
  ③ 函數名不能與已有函數名重復,不能與內置函數名重復。
  ④ bool類型 function_exists("func") 用於檢測函數名是否存在。

二、PHP中變量的作用域

1、局部變量:聲明在函數內部的變量,稱為局部變量,只能在函數內部使用,如果函數外需要使用,需要return關鍵字將變量返回。


2、全局變量:聲明在函數外面的稱為全局變量。
3、註意:PHP中,全局範圍不能訪問局部變量;局部範圍也不能訪問全局變量。
  如果要在函數中使用全局變量,則需要使用 global關鍵字將全局變量引入。
  函數中如果有變量與全局變量重名,global語句之上,使用局部變量;global語句之下,使用全局變量。
4、GLOBALS[] 全局數組
  GLOBALS[] 數組,是PHP內置的全局數組。可以直接給數組添加鍵和值,無論在函數內wai聲明,均可在任何地方使用。
   eg:GLOBALS[‘name‘]="hanghao";
  即,無論在哪裏聲明,在任何地方都可以使用GLOBALS[‘name‘]

5、函數中需要使用全局變量,還有一種方式【函數傳參】
  可以將全局變量通過函數的參數傳入。但是傳入的參數是函數的形參,也就是函數內部的局部變量,這個變量與全局變量實際上是兩個變量,內部改變,全局變量不會變。
  如果,需要在函數內部改變局部變量,可以將形參聲明為取址形式
  function func($a1,$a2){}
  即,函數內修改a1,全局的a1不會改變;函數內修改a2,全局的a2也會改變。
註意:如果函數聲明的形參是取址形式,則調用時必須傳入變量,而不能是字面量。
  例如上面的函數調用: func($a1,$a2); √ func($a1,2); x
  因為字面量,不能 中的變量,無法取地址。
6、PHP中,子函數也無法使用父函數中的變量
  如果子函數要使用父函數的變量,可以將子函數作為變量函數使用,同時配合use關鍵字將父函數的變量傳入子函數。

function func(){
  $a=10;
  $func=func() use($a){
    echo $a;
  }
}

use關鍵字只能配合變量函數使用,而不能用於function func(){}形式。

三、靜態變量

1、使用scatic關鍵字聲明的變量,成為靜態變量。scatic $a=10;
2、靜態變量的特點:
  ① 靜態變量在函數加載是進行聲明。
  ② 靜態變量在函數調用完成後不會被釋放。
  ③ 靜態變量在整個腳本執行過程中,只會聲明一次,腳本執行完成後,釋放變量。
  ④同一函數,多次調用,共享同一靜態變量。

四、函數的參數傳遞

1、在PHP中如果有參數傳遞:實參只能比形參多,不能比形參少!!
2、常規參數傳遞:function func($a){} func(123);
3、引用參數傳遞:function func(&$a){} func($b);
  ①通過&傳遞進來的是實參的地址,所以函數內部改變形參,外部的實參也會變。
  ②如果形參為引用參數,那麽實參必須是變量,而不是字面量。因為字面量沒有地址!! func(10); ×
4、默認參數:function func($b,$a=10){} func(20);
   是$可以不傳,默認為10;$b必須傳遞,否則使用時未定義報錯。
  註意:如果參數中默認參數,也有默認參數,則需要把所有的非默認參數放在前面,所有的默認參數放在後面。

5、可變參數列表:由於PHP實參可以比形參多,那麽我們可以傳遞N個實參,並通過PHP內置函數取到對應參數。
  var_dump(func_get_args()); 返回數組格式,取到所有實參列表;
  var_dump(func_num_args()); 返回實參列表總個數;count(func_num_args());
  var_dump(func_get_arg(0)); 傳入index,取到第幾個參數 func_get_args()[0];

五、變量函數

1、將一個函數名,轉為字符串後,賦給一個變量。這個變量,就是我們所說的變量函數,可以加()調用函數內容。

  function func(){}

  $a="func()"; //$a就是變量函數

  $a();

六、自定義回調函數

1、使用變量函數,自定義回調函數
  function func($func){$func();}--->function f(){}--->func("f");

2、使用call_user_func_array和call_user_func自定義回調函數;
  兩個函數的第一個參數,均為回調函數,表示執行當前回調。
  不同點在於:call_user_func_array()第二個參數為數組,並將數組的每一個值賦給回調函數的參數列表,相當於JS中的apply();
  而call_user_func,是將回調函數的參數列表,直接展開寫到第2~多個參數中,相當於JS中的call();

call_user_func_array("func",array(1,2,3));
    func(1,2,3);
call_user_func("func",1,2,3);
    func(1,2,3);

七、匿名函數

由於變量函數,存在兩種調用方式,(func() $func();)
無法保證調用方法的統一,所以,變量的分號一定不能省略。

$func1 = function(){};

匿名函數本身也是變量,用var_dump();檢測為Object類型

技術分享
 1 function func(){}
 2    $fun = "func";
 3    $fun();
 4    func();
 5    
 6 $func = function(){
 7        echo "I am ZXX<br />";
 8 };
 9 $func(10);
10 var_dump($func);
技術分享

八、include&require

1、兩者的作用:都是用於引入外部的PHP文件到當前文件中。

2、兩者的區別:當引入外部文件出錯時,include會產生waring級別的警告,不會影響代碼的後續執行;而require會產生error級別的錯誤,將阻斷代碼的執行

3、一般,當用於在文件最上方導入某些文件時,使用require導入,如果導入失敗,則不再執行文件;
  而如果是在某些分支條件中,導入執行某些操作,則一般使用include。一旦報錯,不影響其他分支功能。

4、include_once和require_once表示:文件只能導入一次,如果多次調用此函數,則後面的語句會判斷文件是否導入。
再決定是否導入新文件。

5、include和require可以導入各種類型的文件。
相當於在當前文件copy了一份,但是copy過程中,PHP引擎會進行適當的編譯,確保不會出錯。

6、include和require是函數,也是指令!PHP對於很多常用函數會提供指令的寫法。
  eg:echo("11");//函數寫法 echo"11";//指令寫法

技術分享
1 $num = true;
2    if($num){
3        include‘functionDate.php‘;
4            //require "functionDate.php";
5            func1();
6        func2();
7        func3();
8 }
9 echo "haha";
技術分享

九、PHP閉包

在PHP中,子函數無法直接訪問父函數的局部變量,必須使用User關鍵詞向下傳遞!!!

技術分享
 1 $a = 12;
 2 function func1(){
 3    $num = 10;
 4    $num1 = 11;
 5    $func2 = function() use($num,$num1){//使用use關鍵詞傳遞父函數局部變量
 6        global $a;
 7        var_dump($a);
 8        var_dump($num);
 9        var_dump($num1);
10    };
11    return $func2;
12 }
13 $f = func1();
14 $f($num);
技術分享

如果參數中既有默認參數,也有非默認參數,那麽默認參數列表
必須要在非默認參數列表後面,即調用的時候必須保證非默認列表的優先賦值。

PHP基礎入門(二)【PHP函數基礎】