PHP中的函數(shù)聲明與使用詳解
函數(shù)
1. 函數(shù)名是標(biāo)識(shí)符之一,只能有字母數(shù)字下劃線,開(kāi)頭不能是數(shù)字;
函數(shù)名的命名,必須符合“小駝峰法則”FUNC(),func(),Func();
函數(shù)名不區(qū)分大小寫;
函數(shù)名不能與已有函數(shù)同名,不能與內(nèi)置函數(shù)名同名;
2. function_exists("func");用于檢測(cè)函數(shù)是否已經(jīng)聲明;
注意傳入的函數(shù)名,必須是字符串格式,返回結(jié)果為true/false;
echo打印時(shí),true為1,false不顯示;
[php中變量的作用域]
1.局部變量:聲明在函數(shù)內(nèi)部的變量,稱為局部變量,只在函數(shù)內(nèi)部使用,函數(shù)外如需使用,需在函數(shù)中使用return關(guān)鍵字返回;
2.全局變量:聲明在函數(shù)外部的變量,稱為全局變量;
3.(較為常用)函數(shù)中使用變量默認(rèn)使用局部變量,如果需在函數(shù)中使用全局變量,需要使用global關(guān)鍵字將全局變量引入使用;
函數(shù)中的變量名,如果與全局變量名重復(fù),global之上,為函數(shù)的局部變量,global之下為函數(shù)的全局變量;
4.$GLOBALS[''] 全局?jǐn)?shù)組;
$GLOBALS['a3'] 數(shù)組,是PHP給我們內(nèi)置的全局?jǐn)?shù)組,可以直接給數(shù)組添加值,無(wú)論在函數(shù)內(nèi)外聲明,均可在任何地方直接使用;eg:$GLOBALS['a3'] =10;
5.函數(shù)中使用全局變量,還有一種方式:通過(guò)給參數(shù)傳參,可以在函數(shù)內(nèi)部使用全局變量,但是傳遞以后的參數(shù)是局部變量,內(nèi)部改變,外部不會(huì)改變,除非傳遞的參數(shù)是地址.function func($a1,&$a2){}func($a1,$a2);
(原因) $a1是局部變量,內(nèi)部改變,外部不會(huì)改變,$a2也是內(nèi)部變量地址,內(nèi)部改變,外部也改變;
如果函數(shù)的形參,出現(xiàn)了取地址符號(hào),則調(diào)用函數(shù)時(shí),實(shí)參必須是變量,而不能是字面量 ;
eg:func($a1,$a2)對(duì)的 func($a1,2)錯(cuò)的
【靜態(tài)變量】
靜態(tài)變量:使用static關(guān)鍵字聲明,static $num=10;
靜態(tài)變量的特點(diǎn):
靜態(tài)變量在函數(shù)第一次加載的時(shí)候進(jìn)行聲明;
函數(shù)使用完不會(huì)立即釋放靜態(tài)變量,靜態(tài)變量在整個(gè)腳本執(zhí)行過(guò)程中只會(huì)聲明一次;
同一函數(shù)多次調(diào)用,共享同一個(gè)靜態(tài)變量。
[函數(shù)的參數(shù)傳遞方式]
在PHP中實(shí)參的個(gè)數(shù)只能比形參多,不能比形參少,否則會(huì)報(bào)錯(cuò)
1.常規(guī)參數(shù)傳遞:
function fun($a){
$a+=10;
return $a;
}
echo fun(10);
2.引用類型的參數(shù):
$a=10;
function func(&$a){
$a+=10;
}func($b);
引用參數(shù)傳遞,函數(shù)內(nèi)部修改變量,函數(shù)外同步變化;
形參為引用參數(shù),實(shí)參只能是變量,不能是字面量。
3.默認(rèn)參數(shù):
function func($a,$b=10){
return $a+$b;
}
echo func(30); //$b的默認(rèn)參數(shù)是10
如果參數(shù)中既有默認(rèn)參數(shù),又有非默認(rèn)參數(shù),那么,默認(rèn)參數(shù)列表必須要在非默認(rèn)參數(shù)列表的后面,即要保證非默認(rèn)參數(shù)的賦值順序.
func_get_args(); //取所有參數(shù)列表(數(shù)組) func_num_args(); //取所有參數(shù)的總個(gè)數(shù),相當(dāng)于count(func_num_args()); func_get_arg(0); //根據(jù)下表,取每個(gè)參數(shù)
[變量函數(shù) ]
將一個(gè)函數(shù)名,轉(zhuǎn)為字符串后,賦給一個(gè)變量。這個(gè)變量,就是我們所說(shuō)的變量函數(shù),可以加()調(diào)用函數(shù)內(nèi)容;
function func(){ }---->fun="func",----->func( );
[回調(diào)函數(shù)]
1.使用變量函數(shù),自定義回調(diào)函數(shù)
function($func){func();}-->function f(){}--->func("f");
2使用call_user_func_array和call_user_func自定義回調(diào)函數(shù);
兩個(gè)函數(shù)的第一個(gè)參數(shù),均為回調(diào)函數(shù),表示執(zhí)行當(dāng)前回調(diào);
不同點(diǎn)在于:call_user_func_array()第二個(gè)參數(shù)為數(shù)組,并將數(shù)組的每一個(gè)值賦給回調(diào)函數(shù)的參數(shù)列表,相當(dāng)于js中的apply(); 而,call_user_func,是將回調(diào)函數(shù)的參數(shù)列表,直接展開(kāi)寫到第2-多個(gè)參數(shù)中,相當(dāng)于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);
[ 匿名函數(shù)]
由于變量函數(shù)在調(diào)用時(shí)存在多種調(diào)用方式,$fun()/func()所以為了讓函數(shù)的調(diào)用更為統(tǒng)一,才產(chǎn)生了匿名函數(shù)。
聲明匿名函數(shù)函數(shù)體后面的;必不可少!!!
匿名函數(shù)本身也是變量,用var_dump檢測(cè)為object類型;
常規(guī)函數(shù):
function func(){
$fun="func"
}
$fun();//func();
匿名函數(shù):
$func=function($a){
echo "我是匿名函數(shù){$a}<br/>";
}; //聲明匿名函數(shù)函數(shù)體后面的;必不可少
$func(10);
var_dump($func);
例題:計(jì)算一個(gè)數(shù)的階層:
function jiec($num){
static $jie=1; //函數(shù)執(zhí)行完不會(huì)立即釋放
if($num>0){
$jie*=$num; //3
jiec(--$num);
}
return $jie;
}
echo jiec(10);
[遞歸函數(shù)]
指的是在函數(shù)內(nèi)部,調(diào)用函數(shù)自身的操作;當(dāng)外層函數(shù)體中,遇到自身函數(shù)調(diào)用,繼續(xù)進(jìn)入內(nèi)層函數(shù)執(zhí)行,而自身函數(shù)的后半部分暫不執(zhí)行,知道最內(nèi)層函數(shù)執(zhí)行完以后,在逐步向外執(zhí)行;
function func($num){
echo $num."<br/>";
if($num>0){
func($num-1);
//func(--$num); 試一試又不一樣的結(jié)果喲!
//func($num--);
}
echo $num."<br/>";
}func(10);
[include/require]
1.兩者的作用就是用于引入外部的PHP文件到當(dāng)前文件中:include 'a.php';include ('a.php');
2.兩者的區(qū)別:(對(duì)于錯(cuò)誤的處理不同)當(dāng)引入文件錯(cuò)誤時(shí),include會(huì)產(chǎn)生警告,并不影響后續(xù)代碼的執(zhí)行,而require會(huì)產(chǎn)生錯(cuò)誤,后續(xù)代碼不再執(zhí)行;
3.一般當(dāng)用于在文件最上方導(dǎo)入某些文件時(shí),使用require導(dǎo)入,如果失敗,則不執(zhí)行文件;
如果是在某些分支條件中,導(dǎo)入執(zhí)行某些操作,一旦報(bào)錯(cuò)不影響執(zhí)行結(jié)果。
4.include_once和require_once表示:文件只能導(dǎo)入一次,如果多次調(diào)用函數(shù),則后面的文件會(huì)判斷文件是否導(dǎo)入,再?zèng)Q定是否導(dǎo)入新文件。
(檢測(cè)文件是否導(dǎo)入時(shí)只關(guān)心文件是否已經(jīng)導(dǎo)入,并不關(guān)心使用何種方式導(dǎo)入的。)
5.include/require可以導(dǎo)入各種類型的文件,相當(dāng)于在當(dāng)前文件copy了一份,但是copy過(guò)程中,PHP引擎會(huì)進(jìn)行適當(dāng)?shù)木幾g,確保不會(huì)出錯(cuò)。
6.include和require是函數(shù)也是指令!PHP對(duì)于很多常用函數(shù),會(huì)提供執(zhí)行的寫法,eg:函數(shù)寫法echo("111");指令寫echo "111";
以上所述是小編給大家介紹的PHP中的函數(shù)聲明與使用詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
iOS自定義提示彈出框?qū)崿F(xiàn)類似UIAlertView的效果
最近在學(xué)習(xí)iOS開(kāi)發(fā),在牛刀小試的時(shí)候發(fā)現(xiàn)系統(tǒng)的UIAlertView有點(diǎn)不喜歡,然后就自己自定義了一個(gè)UIAlertView,基本上實(shí)現(xiàn)了系統(tǒng)的UIAlertView,可以根據(jù)項(xiàng)目的需求修改UIAlertView的顏色。有需要的朋友們可以參考借鑒,也可以多多指導(dǎo),下面來(lái)一起看看吧。2016-11-11
ThinkPHP框架中使用Memcached緩存數(shù)據(jù)的方法
這篇文章主要介紹了ThinkPHP框架中使用Memcached緩存數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了thinkPHP框架中Memcached緩存的設(shè)置與使用相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
在 Laravel 中動(dòng)態(tài)隱藏 API 字段的方法
這篇文章主要介紹了在 Laravel 中動(dòng)態(tài)隱藏 API 字段的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
ThinkPHP類似AOP思想的參數(shù)驗(yàn)證的實(shí)現(xiàn)方法
這篇文章主要介紹了ThinkPHP類似AOP思想的參數(shù)驗(yàn)證的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
PHP SPL標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)結(jié)構(gòu)棧(SplStack)介紹
這篇文章主要介紹了PHP SPL標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)結(jié)構(gòu)棧(SplStack)介紹,棧(Stack)是一種特殊的線性表,因?yàn)樗荒茉诰€性表的一端進(jìn)行插入或刪除元素(即進(jìn)棧和出棧),需要的朋友可以參考下2015-05-05
PHP 計(jì)算至少是其他數(shù)字兩倍的最大數(shù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了PHP 計(jì)算至少是其他數(shù)字兩倍的最大數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Smarty緩存機(jī)制實(shí)例詳解【三種緩存方式】
這篇文章主要介紹了Smarty緩存機(jī)制,結(jié)合實(shí)例形式詳細(xì)分析了Smarty全局緩存、部分緩存及局部緩存三種緩存實(shí)現(xiàn)方式,并附帶說(shuō)明了Smarty清除緩存的實(shí)現(xiàn)方式,需要的朋友可以參考下2019-07-07

