摘要:函數(shù)的結(jié)構(gòu)分析定義函數(shù)代碼段調(diào)用函數(shù)函數(shù)的命名規(guī)則函數(shù)的命名規(guī)范和變量名的命名規(guī)范相同。這種函數(shù)稱為遞歸函數(shù)。遞歸函數(shù)是考慮將引用作為參數(shù),成為一個橋梁,形成兩個函數(shù)間的數(shù)據(jù)共享。因而將應(yīng)用到遞歸函數(shù)作用可想而知。
PHP常用函數(shù)篇 1.為什么要使用函數(shù)?
//定義函數(shù) function aa (){ //代碼段 } //調(diào)用函數(shù) aa();3.函數(shù)的命名規(guī)則
function aa(){ echo "this is function name aa"; } aa();4.函數(shù)的返回值
function fan($height,$width){ $area=$height*$width; return $area; } $total=fan(4,3); echo $total ; //結(jié)果12,因為3*4=125.函數(shù)的形參與實參 什么是形參,什么是實參
function abc($a) //這個$a是形參 { $a++; echo $a; } $a=2; abc($a); //這個$a是實參 輸出:3 echo $a; //輸出:2 因為傳進abc里的是它的一副本 要想在函數(shù)內(nèi)改變該值,可以用引用傳遞6.函數(shù)的默認值
function printMe($param = NULL) { print $param; } printMe("This is morenzhi function "); printMe(); //This is morenzhi function7.函數(shù)的強類型參數(shù)
function sum($a,$b) { return $a+$b; } var_dump(sum(1,2)); var_dump(sum(1,2.5)); //int(3) float(3.5)8.函數(shù)的可變參數(shù)列表
function sum(...$numbers) { $acc = 0; foreach( $numbers as $number ) { $acc += $number; } return $acc; } echo sum(1,2,3,4); //輸出 //109.函數(shù)值傳遞與引用傳遞 區(qū)別
header("content-type:text/html;charset=utf-8"); $hero = array("no1"=>"蝙蝠俠", "no2"=>"超人"); $hero2 = &$hero; $hero2["no1"] = "蜘蛛俠"; echo ""; var_dump($hero); var_dump($hero2); $a = null; $b = &$a; $b = "abc"; var_dump($a, $b); //結(jié)果 /* array(2) { ["no1"]=> string(9) "蜘蛛俠" ["no2"]=> string(6) "超人" } array(2) { ["no1"]=> string(9) "蜘蛛俠" ["no2"]=> string(6) "超人" } string(3) "abc" string(3) "abc" */10.函數(shù)變量作用域在所有函數(shù)外定義的變量擁有全局作用域,在函數(shù)內(nèi)部聲明的變量是局部變量,僅能在函數(shù)內(nèi)部訪問。要在一個函數(shù)中使用全局變量,需要使用global關(guān)鍵字。
//使用global關(guān)鍵字 11.復(fù)雜函數(shù)-可變函數(shù)如果一個變量名后面有括號,PHP將尋找與該變量值同名的函數(shù),并且嘗試執(zhí)行它。PHP"可變函數(shù)"可以用來實現(xiàn)包括回調(diào)函數(shù)、函數(shù)表在內(nèi)的一些用途。
”可變函數(shù)“不能用于語言結(jié)構(gòu),如echo(),print(),unset(),isset(),empty(),include(),require()等,需要使用自定義的包裝函數(shù)來將這些結(jié)構(gòu)用作可變函數(shù)。
function echoString($str){ echo($str); } $varFun="echoString"; $varFun=("Output String");//輸出"Output String"12.復(fù)雜函數(shù)-嵌套函數(shù)嵌套函數(shù),是一種有條件全局,你可以控制,在什么情況下提供這樣的全局函數(shù)給用戶使用。但也需要注意,過多的全局函數(shù)則會產(chǎn)生“全局污染”,所以,不可多用
function foo() { function bar() { echo "this is qiantao function"; } } /* 現(xiàn)在還不能調(diào)用bar()函數(shù),因為它還不存在 */ foo();//結(jié)果空 /* 現(xiàn)在可以調(diào)用bar()函數(shù)了,因為foo()函數(shù) 的執(zhí)行使得bar()函數(shù)變?yōu)橐讯x的函數(shù) */ bar();//結(jié)果this is qiantao function13.復(fù)雜函數(shù)-遞歸函數(shù) ++ -- 什么是遞歸函數(shù)? 一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。 這種函數(shù)稱為遞歸函數(shù)。 php 遞歸函數(shù)的三種實現(xiàn)方式 利用引用做參數(shù)函數(shù)之間本來也是各行其是,即便是同名函數(shù)。遞歸函數(shù)是考慮將引用作為參數(shù),成為一個橋梁,形成兩個函數(shù)間的數(shù)據(jù)共享。雖然兩個函數(shù)見貌似操作的是不同地址,但是實際上操作的是一塊兒內(nèi)存地址。
function test($a=0,&$result=array()){ $a++; if ($a<10) { $result[]=$a; test($a,$result); } echo $a; return $result; }本例比較有意思的是echo
a的值。相信很多人認為是12345678910吧,其實不然,是1098765432。為什么呢?因為函數(shù)還沒執(zhí)行echo, a前就進行了下一次的函數(shù)遞歸。真正執(zhí)行echo 是當(dāng)a是當(dāng)a<10條件不滿足的時候,echo 返回a,返回result,對于上一層而言,執(zhí)行完遞歸函數(shù),開始執(zhí)行本層的echo $a,依次類推。
利用全局變量利用全局變量完成遞歸函數(shù),請確保你確實理解什么是全局變量。global在函數(shù)內(nèi)申明變量不過是外部變量的同名引用。變量的作用范圍仍然在本函數(shù)范圍內(nèi)。改變這些變量的值,外部同名變量的值自然也改變了。但一旦用了&,同名變量不再是同名引用。利用全局變量實現(xiàn)遞歸函數(shù)沒必要理解到這么深的一層,還保持原有對全局變量的看法就可以順理成章理解遞歸函數(shù)。
function test1($a=0,$result=array()){ global $result; $a++; if ($a<10) { $result[]=$a; test1($a,$result); } return $result; }利用靜態(tài)變量我們常常在類中見到static,今天我們把它利用到遞歸函數(shù)中。請記住static的作用:僅在第一次調(diào)用函數(shù)的時候?qū)ψ兞窟M行初始化,并且保留變量值。
function test(){ static $count=0; echo $count; $count++; } test(); test(); test(); test(); test();請問這一段代碼的執(zhí)行結(jié)果是多少?是00000么?必然不是。是01234。首先第一次調(diào)用test(),static對 $count 進行初始化,其后每一次執(zhí)行完都會保留 $count 的值,不再進行初始化,相當(dāng)于直接忽略了 static $count=0; 這一句。
因而將static應(yīng)用到遞歸函數(shù)作用可想而知。在將需要作為遞歸函數(shù)間作為“橋梁"的變量利用static進行初始化,每一次遞歸都會保留"橋梁變量"的值。
function test3($a=0){ static $result=array(); $a++; if ($a<10) { $result[]=$a; test3($a); } return $result; }總結(jié)所謂遞歸函數(shù),重點是如何處理函數(shù)調(diào)用自身是如何保證所需要的結(jié)果得以在函數(shù)間合理"傳遞",當(dāng)然也有不需要函數(shù)之間傳值得遞歸函數(shù)
14.復(fù)雜函數(shù)-匿名(閉包)函數(shù) 匿名函數(shù)提到閉包就不得不想起匿名函數(shù),也叫閉包函數(shù)(closures),貌似PHP閉包實現(xiàn)主要就是靠它。聲明一個匿名函數(shù)是這樣
$func = function() { };//帶結(jié)束符可以看到,匿名函數(shù)因為沒有名字,如果要使用它,需要將其返回給一個變量。匿名函數(shù)也像普通函數(shù)一樣可以聲明參數(shù),調(diào)用方法也相同:
$func = function( $niming ) { echo $niming; }; $func( "this is niming function" ); //輸出: //this is niming function實現(xiàn)閉包將匿名函數(shù)在普通函數(shù)中當(dāng)做參數(shù)傳入,也可以被返回。這就實現(xiàn)了一個簡單的閉包。
下邊有三個例子。
//例一 //在函數(shù)里定義一個匿名函數(shù),并且調(diào)用它 function bibao() { $func = function( $str ) { echo $str; }; $func( "tihs is bibao" ); } bibao(); //輸出 //tihs is bibao//例二 //在函數(shù)中把匿名函數(shù)返回,并且調(diào)用它 function getPrintStrFunc() { $func = function( $str ) { echo $str; }; return $func; } $printStrFunc = getPrintStrFunc(); $printStrFunc( "this is niming function fanhui" ); //輸出 //this is niming function fanhui//例三 //把匿名函數(shù)當(dāng)做參數(shù)傳遞,并且調(diào)用它 function callFunc( $func ) { $func( "this is niming function canshu chuandi" ); } $printStrFunc = function( $str ) { echo $str; }; callFunc( $printStrFunc ); //輸出 //this is niming function canshu chuandi //也可以直接將匿名函數(shù)進行傳遞。如果你了解js,這種寫法可能會很熟悉 callFunc( function( $str ) { echo $str; } ); //輸出 //this is niming function canshu chuandi連接閉包和外界變量的關(guān)鍵字:USE閉包可以保存所在代碼塊上下文的一些變量和值。PHP在默認情況下,匿名函數(shù)不能調(diào)用所在代碼塊的上下文變量,而需要通過使用use關(guān)鍵字。
有人可能會想到,是否可以在匿名函數(shù)中改變上下文的變量,但我發(fā)現(xiàn)是不可以的:
function getMoney() { $rmb = 1; $func = function() use ( $rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; $func(); echo $rmb; } getMoney(); //輸出: //1 //1原來use所引用的也只不過是變量的一個副本而已。但是我想要完全引用變量,而不是復(fù)制。
要達到這種效果,其實在變量前加一個 & 符號就可以了:
function getMoney() { $rmb = 1; $func = function() use ( &$rmb ) { echo $rmb; //把$rmb的值加1 $rmb++; }; $func(); echo $rmb; } getMoney(); //輸出: //1 //2這些就是PHP的常用函數(shù),對于PHP函數(shù)來說,只要把這幾個了解透徹,開發(fā)一定沒有什么問題。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/26003.html
摘要:原作者分析了多個項目對函數(shù)的使用情況得到如下結(jié)果,當(dāng)然有可能你最常用的不在這個列表,北哥建議初學(xué)者對這些函數(shù)一一仔細研究。分析最常用的函數(shù)是字符串函數(shù),然后是數(shù)組,然后是文件。以上個函數(shù)沒有近期要丟棄的計劃。數(shù)據(jù)庫操作也不納入此排名。 這是一篇外文,翻譯給大家。原作者分析了1900多個項目對php函數(shù)的使用情況得到如下結(jié)果,當(dāng)然有可能你最常用的不在這個列表,北哥建議PHP初學(xué)者對這些函...
摘要:最終版編號生成時間用戶名性別省市搞定,在運行程序,表頭改成編號用戶名生成時間等,不要英文這個問題搞定了。是代表對進行什么樣的格式化,默認來對其處理。分鐘后,我郁悶的回來了,知道這回客戶提了那些亂七八糟的需求么且聽下回分解睡衣篇 增刪改查,數(shù)據(jù)庫操作的四大法寶中最常用的就是查了,一條記錄、幾條記錄、一大堆記錄。對于yii2而言,尤其后臺,GridView是最常用且好用的數(shù)據(jù)列表部件,今天...
摘要:可以在入口文件中定義,然后新建文件夾,達到將應(yīng)用配置放到該文件的目的,這樣方便將配置進行統(tǒng)一管理。動態(tài)配置返回數(shù)據(jù)類型功能同上張三男請求成功 ThinkPHP5 ThinkPHP是一個免費開源的、快速簡單的、面向?qū)ο蟮摹⑤p量級PHP開發(fā)框架。 為什么選擇ThinkPHP5? ThinkPHP5采用了全新的架構(gòu)思想; 優(yōu)化了核心是一個顛覆性的版本; 支持composer方式安裝; 對...
閱讀 3852·2021-11-11 11:02
閱讀 3564·2021-10-11 10:57
閱讀 3695·2021-09-22 16:00
閱讀 1978·2021-09-02 15:15
閱讀 1408·2019-08-30 15:56
閱讀 1091·2019-08-30 15:54
閱讀 2837·2019-08-30 12:43
閱讀 3622·2019-08-29 16:06