PHP基礎入門(三)---PHP函數基礎

PHP基礎入門(三)---函數

       今天來給你們分享一下PHP的函數基礎。有了前兩章的瞭解,想必你們對PHP有了必定的基礎瞭解。想回顧前兩章的朋友能夠點擊 「PHP基礎入門(一)」和PHP基礎入門(二)」    跳轉頁面,溫習PHP的入門基礎。

***本章關鍵詞:函數的聲明與使用;PHP中變量的做用域;靜態變量;函數的參數傳遞;變量函數;回調函數;匿名函數;include&require;PHP閉包php

 

如今,咱們來看一下PHP的函數基礎↓↓↓html

 

 

 

 

函數的聲明與使用

一、函數名是標識符之一,只能有數字字母下劃線,開頭不能是數字。
函數名的命名,須符合"小駝峯法則":myNameIsXiaoxi my_name_is_xiaoxi
函數名不區分大小寫。func() Func() FUNC() 均可以
函數名不能與已有的函數名重複,不能與系統函數名重複。數組

二、function_exists("func1");用於檢測函數是否已聲明;
注意:傳入的函數名,必須是字符串格式:返回結果爲true/false。閉包

 

PHP中變量的做用域

一、局部變量:聲明在函數內部的變量,稱爲局部變量。只在函數內部能用,函數外加需使用,需在函數中使用return關鍵字返回。
二、全局變量:聲明的函數外部的變量,稱爲全局變量。
三、函數中,使用變量,默認使用內部局部變量。若是,需在函數中使用全局變量,須要使用global關鍵字,將全局變量引用函數,才能使用。app

函數中的變量名,若是與全局變量重複,global語句之上,爲函數局部變量;global語句之下,爲系統全局變量。ide

四、 $GLOBALS[]全局數組:
$GLOBALS[]數組,是PHP給咱們內置的全局數組,能夠直接給數組添加值,不管在函數內外聲明,都可在任何地方直接使用。
$GLOBALS["a"] = 10; ---> echo $GLOBALS["a"];//任何位置直接使用函數

五、函數中使用全局變量,還有一種方式:經過給函數傳參,能夠在函數內部使用全局變量;
可是,傳遞之後的參數是函數的局部變量,內部改變,外部不會變。
除非,傳遞的參數是地址function func($a1,&$a2){} //函數內部修改a1,則全局a1不會變,函數內部修改a2,則全局a2會變。ui

若是函數的形參,出現了取址符號,則,調用函數時,實參必須是變量,而不能是字面量。
例如上例中,func($a1,$a2); √ func($a1,2); ×spa

六、使用require與include包含不會影響做用域。3d

 

靜態變量

一、靜態變量,使用static關鍵字聲明。static $num = 10;
二、靜態變量的特色:
>>>靜態變量在函數第一次加載的時候進行聲明。
>>>函數使用完不會當即釋放靜態變量,靜態變量在整個腳本執行過程當中,只會聲明一次。
>>>同一函數,屢次調用,共享同一個靜態變量。

 

函數的參數傳遞

一、在PHP中,涉及參數傳遞時:實參列表只能比形參多,
二、常規參數傳遞:function func($a){} func($a);
三、引用參數傳遞:function func(&$a){} func($a);
①經過&引用參數傳遞,函數內修改變量,函數外同步變化
②形參爲引用參數,實參只能是變量,不能是字面量 func(10); ×
四、默認參數:function func($b,$a=10){} func(20);
//是$能夠不傳,默認爲10;$b必須傳遞,不然使用時未定義報錯。
若是參數中既有默認參數,也有非默認參數,那麼默認參數列表
必需要在非默認參數列表後面,即調用的時候必須保證非默認列表的優先賦值。

五、可變參數列表:因爲PHP實參能夠比形參多,那麼咱們能夠傳遞N個實參,並經過PHP內置函數取到對應參數。
var_dump(func_get_args());//取全部參數列表(數組)
var_dump(func_num_args());//返回參數的總個數至關於count(func_get_args());
var_dump(func_get_arg(0));//根據下標,返回每一個參數

 

變量函數

一、將一個函數名,轉爲字符串後,賦給一個變量。這個變量,就是咱們所說的變量函數,能夠加()調用函數內容。
function func(){}--->$fun = "func";--->$func();

 

回調函數

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

二、使用call_user_func_array和call_user_func自定義回調函數;
兩個函數的第一個參數,均爲回調函數,表示執行當前回調。
不一樣點在於:call_user_func_array()第二個參數爲數組,並將數組的每個值賦給回調函數的參數列表,至關於JS中的apply();
而call_user_func,是將回調函數的參數列表,直接展開寫到第2~多個參數中,至關於JS中的call();
eg: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();)
因此爲了讓函數的調用更爲同一,才產生了匿名函數!!!
聲明匿名函數,函數體後面的分號必不可少!

匿名函數自己也是變量,用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

一、二者的做用,都是用於引入外部的PHP文件到當前文件中。

二、二者的區別:當引用文件錯誤時,include會產生警告,並不影響後續代碼執行。
而require會產生致命錯誤,後續代碼所有再也不執行。

三、通常,當用於在文件最上方導入某些文件時,使用require導入,若是導入失敗,則再也不執行文件;
而若是是在某些分支條件中,導入執行某些操做,則通常使用include。一旦報錯,不影響其餘分支功能。

四、include_once和require_once表示:文件只能導入一次,若是屢次調用此函數,則後面的語句會判斷文件是否導入。
再決定是否導入新文件。
(檢測文件是否導入時,只關心文件是否已經導入,並不關心是否以何種方式導入的)
include("test.txt");
require_once "test.txt";//因爲include進來了,require再也不導入。

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

六、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);

 

 

 


 

 

 

做者:夕照但願
出處: http://www.cnblogs.com/hope666/  
相關文章
相關標籤/搜索