PHP函數(shù)介紹
沿灘網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
基本使用:
函數(shù)定義形式:
function 函數(shù)名(形參1,形參2,...) {
//函數(shù)體(代碼塊);
}
函數(shù)調(diào)用形式:
本質(zhì)上就是使用一個(gè)名字來達(dá)到執(zhí)行其中函數(shù)中的的作用。通??梢苑謨煞N情形的調(diào)用:
第一種:沒有返回值的函數(shù),則調(diào)用語句是獨(dú)立語句
函數(shù)名(實(shí)參1,實(shí)參2,...); //實(shí)參個(gè)數(shù)應(yīng)該跟形參有匹配性
第二種:有返回值的函數(shù),則調(diào)用語句,通常會(huì)“混雜”在別的語句中,并將該調(diào)用語句當(dāng)作一個(gè)“數(shù)據(jù)”來使用:
A: $v1 = 函數(shù)名(); //賦值給其它變量,這里省略實(shí)參語法,下同
B: $v1 = 函數(shù)名()*3+6; //參與運(yùn)算,然后再賦值
C: echo 函數(shù)名(); //直接輸出
D: echo 函數(shù)名()*3+6; //參與運(yùn)算,然后再輸出
E: $v1 = 函數(shù)名2(函數(shù)名(),實(shí)參2,實(shí)參3,...); //當(dāng)作實(shí)參使用
函數(shù)調(diào)用流程分析:
開始調(diào)用:實(shí)際參數(shù)傳數(shù)據(jù)給形式參數(shù)
程序執(zhí)行流程進(jìn)入到函數(shù)中(一個(gè)獨(dú)立的運(yùn)行空間),跟全局執(zhí)行空間是隔離的
按常規(guī)的程序邏輯執(zhí)行函數(shù)中的代碼
如果碰到return語句,則終止函數(shù)的執(zhí)行,跳回函數(shù)開始調(diào)用的位置
如果執(zhí)行到函數(shù)的最后位置,也同樣跳回函數(shù)開始調(diào)用的位置
其運(yùn)行流程原理圖如下:
函數(shù)參數(shù)問題:
一個(gè)函數(shù),
在定義時(shí),有形式參數(shù)(形參:parameter)
1:形參一定是一個(gè)變量名,
2:該變量名只能是在該函數(shù)中有效的變量名,
3:而且只在該函數(shù)調(diào)用并執(zhí)行時(shí)有效,函數(shù)結(jié)束,通常這些變量也就“銷毀”
在調(diào)用時(shí)有實(shí)際參數(shù)(實(shí)參:argument)
實(shí)參就是一個(gè)“實(shí)際數(shù)據(jù)”,該數(shù)據(jù)可以是一個(gè)“直接數(shù)據(jù)”(比如5,"abc"),也可以是一個(gè)變量中存儲(chǔ)的數(shù)據(jù)。
實(shí)參的作用是將其數(shù)據(jù)”賦值給“形參變量
實(shí)參跟形參之間通常應(yīng)該有個(gè)“一一對(duì)應(yīng)”關(guān)系
默認(rèn)值參數(shù):
定義一個(gè)函數(shù)的時(shí)候,在形式參數(shù)的位置,可以給形式參數(shù)設(shè)定默認(rèn)值,此時(shí)就可以稱為默認(rèn)值參數(shù)。比如:
注意:
默認(rèn)值不能是對(duì)象或資源類型
默認(rèn)值只能是常量表達(dá)式,或常量,不能是變量
即:如下語法是正確的:function f1($v = 3) {}, function f1($v = __LINE__) {},
如下語法是錯(cuò)誤的:function f1($v = 3+1) {} , $m = 3,function f1($v = $m) {},
函數(shù)的參數(shù)傳值問題:
實(shí)際上,函數(shù)的參數(shù)傳值問題,跟變量之間的傳值是一樣的規(guī)則(模式):默認(rèn)是值傳遞。
如果實(shí)參本身就是“直接數(shù)據(jù)”,則不存在傳值問題,而是簡(jiǎn)單的“賦值”
傳值問題只發(fā)生在實(shí)參是變量的情形:
我們也可以讓某個(gè)參數(shù)(形參)以引用傳遞的方式來傳值:
引用傳遞的形參(實(shí)參),在函數(shù)內(nèi)部改變其值,在函數(shù)外面的實(shí)參,也會(huì)相應(yīng)做修改
注意:如果某個(gè)形參設(shè)定為引用傳遞,此時(shí),實(shí)參只能使用變量,否則會(huì)出現(xiàn)語法錯(cuò)誤,如:
參數(shù)的數(shù)量問題:
1:函數(shù)的參數(shù)的數(shù)量可以是0個(gè)或多個(gè) -- 具體多少個(gè),不是語法問題,而是應(yīng)用問題
2:通常,實(shí)際參數(shù)的數(shù)量應(yīng)該跟形式參數(shù)的數(shù)量一致
3:但是,在第二條的基礎(chǔ)上,如果形式參數(shù)中有默認(rèn)值,則實(shí)際參數(shù)的對(duì)應(yīng)項(xiàng)可以少省略
即:實(shí)參的個(gè)數(shù),至少應(yīng)該不少于形參中的非默認(rèn)值參數(shù)的個(gè)數(shù)
但:我們還有一種特殊的處理函數(shù)參數(shù)的用法:自由參數(shù)數(shù)量
定義時(shí)可以不給定形參,但調(diào)用時(shí),卻又可以給定任何個(gè)數(shù)的實(shí)參
在系統(tǒng)中,var_dump()這個(gè)函數(shù)也有同樣的使用效果:
$var_dump($v1);
var_dum($v1,$v2,$v3); //這樣也是可以的
這種應(yīng)用的實(shí)現(xiàn),是依賴于系統(tǒng)中的3個(gè)系統(tǒng)函數(shù)來達(dá)到的:
func_get_args(); //獲得一個(gè)函數(shù)的接收到的所有實(shí)參數(shù)據(jù),并結(jié)果是一個(gè)數(shù)組
func_get_arg(n); //獲得一個(gè)函數(shù)所接收到的第n個(gè)實(shí)參數(shù)據(jù)(n從0開始)
func_num_args(); //獲得一個(gè)函數(shù)所接收到的所有實(shí)參數(shù)據(jù)個(gè)數(shù)
函數(shù)的返回值:
通常來說,一個(gè)函數(shù)中使用reture語句,并其后帶一個(gè)數(shù)據(jù)(直接數(shù)據(jù),變量數(shù)據(jù),表達(dá)式結(jié)果數(shù)據(jù))則該函數(shù)就會(huì)返回該數(shù)據(jù)到“調(diào)用的位置":
通常情況下,函數(shù)返回的數(shù)據(jù)都是以”值傳遞“的形式返回,函數(shù)中的變量的值”拷貝“一份,然后返回給接收的位置的相應(yīng)代碼(賦值,輸出,計(jì)算)。
但我們也可以讓函數(shù)中的變量的數(shù)據(jù)的值,以”引用傳遞“的方式返回,形式如下:
定義函數(shù):
function $函數(shù)名(parameter1,parameter2,...) { //函數(shù)名前有個(gè)引用符號(hào)
$result = 0; //初始化
......
return $result; //此時(shí)返回?cái)?shù)據(jù),只能是變量
}
調(diào)用函數(shù):
$v1 = $函數(shù)名(argument1,argument2,...); //引用返回的函數(shù),自然是指有返回值
函數(shù)的其他形式:
1:可變函數(shù)-- 就是函數(shù)名“可變”,其實(shí)跟可變變量一樣道理
$str1 = "f1"; //只是一個(gè)字符串,內(nèi)容為"f1"
$v1 = $str1(3,4); //形式上看起來是一個(gè)變量后面加上括號(hào),則其本質(zhì)是該變量的“內(nèi)容”(f1)后面加括號(hào),即這里是調(diào)用函數(shù)f1(3,4)。實(shí)際應(yīng)用中,常常是需要根據(jù)“用戶給定”的數(shù)據(jù),來決定調(diào)用哪個(gè)函數(shù),比如:
function jpg() {處理jpg圖};
function png() {處理png圖};
function gif() {處理gif圖};
$fileName = get_fileName() {獲取用戶上傳的圖片名};
$houzhui = get_houzhui($fileName);
$houzhui();
2:匿名函數(shù)-- 就是沒有名字的函數(shù),其有兩種表現(xiàn)形式:
表現(xiàn)形式1:
$f1 = function() {...函數(shù)體;}; //這里的匿名函數(shù)定義形式上沒有名字,但其實(shí)又將之賦值給了變量$f1;使用時(shí),就跟“可變函數(shù)”一樣了:$v1 = $f1();
表現(xiàn)形式2:
調(diào)用其他函數(shù)(匿名函數(shù),argument1,argument2,...);
說明:
1:此形式的匿名函數(shù)只有定義的函數(shù)體(無函數(shù)名)
2:此形式的匿名函數(shù)只能作為其他函數(shù)調(diào)用時(shí)的參數(shù)(其他函數(shù)通常有特定用處)
3:此匿名函數(shù)會(huì)在調(diào)用其他函數(shù)的“過程中”被執(zhí)行。
能夠使用(匿名)函數(shù)當(dāng)作實(shí)參的函數(shù),并不多!
其中有一個(gè)常見的是:call_user_func_array();
其使用形式為:
call_user_func_array(匿名函數(shù),數(shù)組);
含義:將數(shù)組當(dāng)作匿名函數(shù)的若干個(gè)實(shí)參,傳遞到該匿名函數(shù)中,并可以從該匿名函數(shù)中返回?cái)?shù)據(jù),執(zhí)行該匿名函數(shù)。
變量的作用域:
通常說作用域,有2個(gè):
局部作用域:只能在所定義的函數(shù)范圍內(nèi)使用
全局作用域:在函數(shù)的“外部”范圍使用
-- php中,局部和全局作用域是不重疊的。
-- js中,全局作用域是包括局部作用域的。
但還有兩個(gè):
超全局:就是函數(shù)的內(nèi)部與外部都可以使用。
超全局變量只有系統(tǒng)內(nèi)部預(yù)定義的那幾個(gè),我們不能在程序中創(chuàng)建超全局變量
靜態(tài)局部作用域:其實(shí)也是局部,但多一個(gè)特征:數(shù)據(jù)能夠在函數(shù)退出后仍然保持不丟失。
局部訪問全局變量的特定語法:
1:在局部范圍內(nèi)使用 global 關(guān)鍵字對(duì)全局變量進(jìn)行一次“聲明”,則就可以使用了
說明:
1:實(shí)際上,函數(shù)中的 global 語句,其實(shí)是創(chuàng)建了一個(gè)跟外部變量同名的局部變量,并通過“引用”的方式指向了外部變量的數(shù)據(jù)區(qū)
實(shí)例:
2:在函數(shù)中(局部范圍),使用$GLOBALS超全局?jǐn)?shù)組來引用(使用)全局變量
$GLOBALS超全局?jǐn)?shù)組的作用是用于存儲(chǔ)所有全局變量的數(shù)據(jù):變量名為下標(biāo),變量值為對(duì)應(yīng)元素值。
但通過$GLOBALS操作全局變量,是直接操作(而不是引用操作),即如果unset該對(duì)應(yīng)元素,則全局變量對(duì)應(yīng)變量也被unset掉:
3:實(shí)際上,我們還可以在函數(shù)內(nèi)部直接使用$GLOBALS數(shù)組,添加元素的方式來創(chuàng)建全局變量,自然也就類似局部使用全局
全局訪問局部變量的特定語法:
1:通過引用傳遞的方式向形參傳遞一個(gè)引用實(shí)參變量
$v1 = 10;
function f1(&$p1,$p2) {...} //$p1是函數(shù)的形參,也即就是函數(shù)的內(nèi)部(局部)變量
$v2 = f1($v1,10); //此時(shí)我們認(rèn)為$v1就可以使用函數(shù)中$p1的值。
2:使用函數(shù)的引用返回形式:見前面引用的方式返回?cái)?shù)據(jù)
3:函數(shù)中使用global關(guān)鍵字來首次引用一個(gè)全局變量,則函數(shù)結(jié)束后在全局范圍就可以使用該變量了
當(dāng)前文章:PHP函數(shù)介紹
新聞來源:http://chinadenli.net/article26/pehjcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、品牌網(wǎng)站制作、面包屑導(dǎo)航、企業(yè)網(wǎng)站制作、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)