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

零下一度
發布: 2023-03-10 17:26:02
原創
1167 人瀏覽過

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類型

示範程式碼:

<span style="font-family: 楷体; font-size: 14pt"><span style="color: #008080"> 1</span> <span style="color: #0000ff">function</span><span style="color: #000000"> func(){}</span><span style="color: #008080"> 2</span>    <span style="color: #800080">$fun</span> = "func"<span style="color: #000000">;</span><span style="color: #008080"> 3</span>    <span style="color: #800080">$fun</span><span style="color: #000000">();</span><span style="color: #008080"> 4</span> <span style="color: #000000">   func();</span><span style="color: #008080"> 5</span>    <span style="color: #008080"> 6</span> <span style="color: #800080">$func</span> = <span style="color: #0000ff">function</span><span style="color: #000000">(){</span><span style="color: #008080"> 7</span>        <span style="color: #0000ff">echo</span> "I am ZXX<br />"<span style="color: #000000">;</span><span style="color: #008080"> 8</span> <span style="color: #000000">};</span><span style="color: #008080"> 9</span> <span style="color: #800080">$func</span>(10<span style="color: #000000">);</span><span style="color: #008080">10</span> <span style="color: #008080">var_dump</span>(<span style="color: #800080">$func</span>);<br></span>
登入後複製

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);
登入後複製

 

 

 


 

 

以上是PHP中你必須掌握的入門知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!