PHP中你必須掌握的入門知識

來源:互聯網
上載者:User

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

今天來給大家分享一下PHP的函數基礎。有了前兩章的瞭解,想必大家對PHP有了一定的基礎瞭解。想回顧前兩章的朋友可以點擊 “PHP基礎入門(一)”和“PHP基礎入門(二)” 跳轉頁面,溫習PHP的入門基礎。

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

現在,我們來看一下PHP的函數基礎↓↓↓

函數的聲明與使用

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

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

PHP中變數的範圍

1、局部變數:聲明在函數內部的變數,稱為局部變數。只在函數內部能用,函數外加需使用,需在函數中使用return關鍵字返回。
2、全域變數:聲明的函數外部的變數,稱為全域變數。
3、函數中,使用變數,預設使用內部局部變數。如果,需在函數中使用全域變數,需要使用global關鍵字,將全域變數引用函數,才能使用。

函數中的變數名,如果與全域變數重複,global語句之上,為函數局部變數;global語句之下,為系統全域變數。

4、 $GLOBALS[]全域數組:
$GLOBALS[]數組,是PHP給我們內建的全域數組,可以直接給數組添加值,無論在函數內外聲明,均可在任何地方直接使用。
$GLOBALS["a"] = 10; ---> echo $GLOBALS["a"];//任何位置直接使用

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

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

6、使用require與include包含不會影響範圍。

靜態變數

1、靜態變數,使用static關鍵字聲明。static $num = 10;
2、靜態變數的特點:
>>>靜態變數在函數第一次載入的時候進行聲明。
>>>函數使用完不會立即釋放靜態變數,靜態變數在整個指令碼執行過程中,只會聲明一次。
>>>同一函數,多次調用,共用同一個靜態變數。

函數的參數傳遞

1、在PHP中,涉及參數傳遞時:實參列表只能比形參多,
2、常規參數傳遞:function func($a){} func($a);
3、引用參數傳遞:function func(&$a){} func($a);
①通過&引用參數傳遞,函數內修改變數,函數外同步變化
②形參為引用參數,實參只能是變數,不能是字面量 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_get_args());
var_dump(func_get_arg(0));//根據下標,返回每個參數

變數函數

1、將一個函數名,轉為字串後,賦給一個變數。這個變數,就是我們所說的變數函數,可以加()調用函數內容。
function func(){}--->$fun = "func";--->$func();

回呼函數

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();
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

1、兩者的作用,都是用於引入外部的PHP檔案到當前檔案中。

2、兩者的區別:當引用檔案錯誤時,include會產生警告,並不影響後續代碼執行。
而require會產生致命錯誤,後續代碼全部不再執行。

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

4、include_once和require_once表示:檔案只能匯入一次,如果多次調用此函數,則後面的語句會判斷檔案是否匯入。
再決定是否匯入新檔案。
(檢測檔案是否匯入時,只關心檔案是否已經匯入,並不關心是否以何種方式匯入的)
include("test.txt");
require_once "test.txt";//由於include進來了,require不再匯入。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.