這篇“PHP函數(shù)及作用域的知識(shí)點(diǎn)有哪些”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“PHP函數(shù)及作用域的知識(shí)點(diǎn)有哪些”文章吧。
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比山陽網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式山陽網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋山陽地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
函數(shù):function,是一種語法結(jié)構(gòu),將實(shí)現(xiàn)某一個(gè)功能的代碼塊(多行代碼)封裝到一個(gè)結(jié)構(gòu)中,從而實(shí)現(xiàn)代碼的重復(fù)利用(復(fù)用)。
函數(shù)有幾個(gè)對(duì)應(yīng)的關(guān)鍵點(diǎn):function關(guān)鍵字、函數(shù)名、參數(shù)(形參和實(shí)參)、函數(shù)體和返回值。
基本語法如下:
Function 函數(shù)名([參數(shù)]){ //函數(shù)體,基本上所有的代碼都可以實(shí)現(xiàn),定義變量、定義常量、使用流程控制(分支、循環(huán))、可以調(diào)用函數(shù)。 //返回值:return 結(jié)果; }
定義函數(shù)的目的:是為了實(shí)現(xiàn)代碼的重復(fù)利用,一個(gè)功能一個(gè)函數(shù)(簡(jiǎn)單明了)。
函數(shù)是在代碼執(zhí)行階段,碰到函數(shù)名字的時(shí)候才會(huì)調(diào)用,不是在編譯階段。函數(shù)的調(diào)用特點(diǎn):只要系統(tǒng)在內(nèi)存中能夠找到對(duì)應(yīng)的函數(shù),就可以執(zhí)行(函數(shù)的調(diào)用可以在函數(shù)定義之前)
函數(shù)執(zhí)行的內(nèi)存分析:
讀取代碼進(jìn)入到代碼段(編譯:將代碼變成字節(jié)碼存儲(chǔ)到內(nèi)存)
根據(jù)代碼逐行執(zhí)行——編譯和執(zhí)行是分開的(先編譯后執(zhí)行)
命名規(guī)范:由字母、數(shù)字和下劃線組成,但是不能以數(shù)字開頭。函數(shù)作為一種常用的結(jié)構(gòu),一般遵循以下規(guī)則:函數(shù)通常名字代表著函數(shù)的功能,而有些功能會(huì)比較復(fù)雜,可能一個(gè)單詞不足以表達(dá),需要多個(gè)組合。
駝峰法:除了左邊第一個(gè)單詞外,后面所有的單詞首字母都大寫:showParentInfo()
劃線法:?jiǎn)卧~之間通過下劃線連接,單詞都是小寫:show_parent_info()
形參:形式參數(shù),不具有實(shí)際意義的參數(shù),是在函數(shù)定義時(shí)使用的參數(shù)。
實(shí)參:實(shí)際參數(shù),具有實(shí)際意義的參數(shù),是在函數(shù)調(diào)用時(shí)使用的參數(shù)。
兩者關(guān)系:形參是實(shí)參的載體:實(shí)參在調(diào)用時(shí)通常是需要傳入到函數(shù)內(nèi)部參與計(jì)算(運(yùn)算),那么需要在函數(shù)內(nèi)部去找到實(shí)際數(shù)據(jù)所在的位置才能找到數(shù)據(jù)本身:需要實(shí)際調(diào)用的時(shí)候,將數(shù)據(jù)以實(shí)參的形式傳遞給形參:給形參賦值,從而使得函數(shù)內(nèi)部可以用到外部數(shù)據(jù)。
函數(shù)參數(shù)形參和實(shí)參
在PHP中允許實(shí)參多余形參(個(gè)數(shù)):函數(shù)內(nèi)部不用而已
在PHP中理論上形參個(gè)數(shù)沒有限制(實(shí)際開發(fā)不會(huì)太多)
實(shí)參不能少于形參個(gè)數(shù)。
默認(rèn)值:default value,指的是形參的默認(rèn)值,在函數(shù)定義的時(shí)候,就給形參進(jìn)行一個(gè)初始賦值:如果實(shí)際調(diào)用傳入的參數(shù)(實(shí)參)沒有提供,那么形參就會(huì)使用定義時(shí)的值來進(jìn)入函數(shù)內(nèi)部參與運(yùn)算。通常默認(rèn)值是用在一些,一定會(huì)有某個(gè)數(shù)據(jù)參與,但是可能通常是某個(gè)我們知道的值。
形參默認(rèn)值
"; echo $a;//10 ?>
注意:默認(rèn)值的定義是放在最右邊的(多個(gè)),不能左邊形參有默認(rèn)值,但是右邊沒有函數(shù)外部定義的變量名字與函數(shù)定義的形參名字沖突(同名)是沒有任何關(guān)聯(lián)關(guān)系的;如果多個(gè)函數(shù)使用同樣的形參名字也不沖突。
實(shí)參在調(diào)用時(shí)會(huì)將值賦值給形參,那么實(shí)際上使用的方式就是一種簡(jiǎn)單的值傳遞:將實(shí)參(如果是變量或者常量或者其他表達(dá)式)的結(jié)果(值)取出來賦值給形參:形參與外部實(shí)際傳入的參數(shù)本身沒有任何關(guān)聯(lián)關(guān)系:只是結(jié)果一樣。有的時(shí)候,希望在函數(shù)內(nèi)部拿到的外部數(shù)據(jù),能夠在函數(shù)內(nèi)部改變,那么就需要明確告知函數(shù)(定義時(shí)),函數(shù)才會(huì)在調(diào)用的時(shí)候去主動(dòng)獲取外部數(shù)據(jù)的內(nèi)存地址。以上這種定義形式參數(shù)的方式叫作引用傳值。
基本定義語法:
Function 函數(shù)名(形參1,&形參2){
//函數(shù)體
}
引用傳遞
";echo $y,"
"; }; $x = 4;$y = 2;//定義變量 xiao($x,$y); echo $x,"
",$y,"
"; ?>
思考:兩者對(duì)比,為什么第二個(gè)y變成了4?
參考:php——三篇夯實(shí)根基第一篇_xiaochuhe.的博客-CSDN博客里面的變量引用賦值。
注意:引用傳值注意事項(xiàng):在傳入實(shí)參的時(shí)候,必須傳入變量?。?!
返回值:return,指的是將函數(shù)實(shí)現(xiàn)的結(jié)果,通過return關(guān)鍵字,返回給函數(shù)外部(函數(shù)調(diào)用處):在PHP中所有的函數(shù)都有返回值。(如果沒有明確return使用,那么系統(tǒng)默認(rèn)返回NULL。
函數(shù)返回值
';//輸出當(dāng)前函數(shù)的名稱 echo __FILE__;echo '
';//輸出當(dāng)前文件名的絕對(duì)路徑 }; //chuhe();echo '
'; var_dump(chuhe());
返回值作用:將計(jì)算結(jié)果返回給調(diào)用處,并且函數(shù)的返回值可以是任意數(shù)據(jù)類型。
函數(shù)返回值——Retrun
return在函數(shù)內(nèi)部存在的價(jià)值:返回當(dāng)前函數(shù)的結(jié)果(當(dāng)前函數(shù)運(yùn)行結(jié)束)
return還可以在文件中直接使用(不在函數(shù)里面):代表文件將結(jié)果return后面跟的內(nèi)容,轉(zhuǎn)交給包含當(dāng)前文件的位置。(通常在系統(tǒng)配置文件中使用較多),在文件中也代表中終止文件后面的代碼:return之后的內(nèi)容不會(huì)執(zhí)行。
八、作用域
作用域:變量(常量)能夠被訪問的區(qū)域
變量可以在普通代碼中定義
變量也可以在函數(shù)內(nèi)部定義
作用域分類:
全局變量
局部變量
超全局變量
1.全局變量
全局變量:就是用戶普通定義的變量(函數(shù)外部定義)
所屬全局空間:在PHP中只允許在全局空間使用:理論上函數(shù)內(nèi)部不可方法
腳本周期:直到腳本運(yùn)行結(jié)束(最后一行代碼執(zhí)行完)
全局變量
2.局部變量
局部變量:就是在函數(shù)內(nèi)部定義的變量
所屬當(dāng)前函數(shù)空間:在PHP中只允許在當(dāng)前函數(shù)自己內(nèi)部使用
函數(shù)周期:函數(shù)執(zhí)行結(jié)束(函數(shù)是在棧區(qū)中開辟獨(dú)立內(nèi)存空間運(yùn)行)
局部變量
3. 超全局變量
超全局變量:系統(tǒng)定義的變量(預(yù)定義變量:$_SERVER、$_POST等)
所屬超全局空間:沒有訪問限制(函數(shù)內(nèi)外都可以訪問)
超全局變量會(huì)將全局變量自動(dòng)納入到$GLOBALS里面,而$GLOBALS沒有作用域限制,所以能夠幫助局部去訪問全局變量:但是必須使用數(shù)組方式。
(1)內(nèi)部調(diào)用外部
超全局變量
(2)外部調(diào)用內(nèi)部
超全局變量
4.靜態(tài)變量
靜態(tài)變量:static,是在函數(shù)內(nèi)部定義的變量,使用static關(guān)鍵字修飾,用來實(shí)現(xiàn)跨函數(shù)共享數(shù)據(jù)的變量:函數(shù)運(yùn)行結(jié)束所有局部變量都會(huì)清空,如果重新運(yùn)行一下函數(shù),所有的局部變量又會(huì)重新初始化。
基本語法:
Function 函數(shù)名(){
//定義變量
Static $變量名 = 值; //通常會(huì)在定義的時(shí)候就直接賦值
}
靜態(tài)變量
"; echo $b++;echo "
"; }; xiao();//調(diào)用函數(shù) xiao();//再調(diào)一次 xiao();//再調(diào)一次靜態(tài)變量的作用是為了跨函數(shù)共享數(shù)據(jù)(同一個(gè)函數(shù)被多次調(diào)用) 。
九、可變函數(shù)
當(dāng)前有一個(gè)變量所保存到值,剛好是一個(gè)函數(shù)的名字,那么就可以使用變量+()來充當(dāng)函數(shù)名使用。
可變函數(shù)
附加思考:
可變函數(shù)
","懵了吧,多想想就懂了!"; //懵了吧,多想想就懂了!!十、匿名函數(shù)
沒有名字的函數(shù),變量保存匿名函數(shù),本質(zhì)得到的是一個(gè)對(duì)象(Closure)。
函數(shù)
";//調(diào)用匿名函數(shù) var_dump($xiaofeng);//查案變量類型及內(nèi)容十一、閉包函數(shù)
閉包:closure, 一詞來源于以下兩者的結(jié)合:要執(zhí)行的代碼塊(由于自由變量被包含在代碼塊中,這些自由變量以及它們引用的對(duì)象沒有被釋放)和為自由變量提供綁定的計(jì)算環(huán)境(作用域)簡(jiǎn)單理解:函數(shù)內(nèi)部有一些局部變量(要執(zhí)行的代碼塊)在函數(shù)執(zhí)行之后沒有被釋放,是因?yàn)樵诤瘮?shù)內(nèi)部還有對(duì)應(yīng)的函數(shù)在引用(函數(shù)的內(nèi)部函數(shù):匿名函數(shù))
閉包函數(shù)
思考:函數(shù)使用完后局部變量有沒有被釋放?
閉包函數(shù)
十二、偽類型
偽類型:假類型,實(shí)際上在PHP中不存在的類型。但是通過偽類型可以幫助程序員去更好的查看操作手冊(cè)從而更方便學(xué)習(xí)。
偽類型主要有兩種:在三大類八小類之外
Mixed:混合的,可以是多種PHP中的數(shù)據(jù)類型
Number:數(shù)值的,可以是任意數(shù)值類型(整形和浮點(diǎn)型)
十三、常用系統(tǒng)函數(shù)
(一)關(guān)于輸出的函數(shù)
print():類似于echo輸出提供的內(nèi)容,本質(zhì)是一種結(jié)構(gòu)(不是函數(shù)),返回1,可以不需要使用括號(hào)
print_r():類似于var_dump,但是比var_dump簡(jiǎn)單,不會(huì)輸出數(shù)據(jù)的類型,只會(huì)輸出值(數(shù)組打印使用比較多)
(二)關(guān)于時(shí)間的函數(shù)
date():按照指定格式對(duì)對(duì)應(yīng)的時(shí)間戳(從1970年格林威治時(shí)間開始計(jì)算的秒數(shù)),如果沒有指定特定的時(shí)間戳,那么就是默認(rèn)解釋當(dāng)前時(shí)間戳
time():獲取當(dāng)前時(shí)間對(duì)應(yīng)的時(shí)間戳
microtime():獲取微秒級(jí)別的時(shí)間
Strtotime():按照規(guī)定格式的字符串轉(zhuǎn)換成時(shí)間戳
時(shí)間函數(shù)
"; echo time();echo "
"; echo microtime();echo "
"; echo strtotime(" 10 hours");(三)關(guān)于數(shù)學(xué)的函數(shù)
max():指定參數(shù)中最大的值
min():比較兩個(gè)數(shù)中較小的值
rand():得到一個(gè)隨機(jī)數(shù),指定區(qū)間的隨機(jī)整數(shù)
mt_rand():與rand一樣,只是底層結(jié)構(gòu)不一樣,效率比rand高(建議使用)
round():四舍五入
ceil():向上取整
floor():向下取整
pow():求指定數(shù)字的指定指數(shù)次結(jié)果:pow(2,8) == 2^8 == 256
abs():絕對(duì)值
sqrt():求平方根
(四)關(guān)于自定義函數(shù)的函數(shù)
function_exists():判斷指定的函數(shù)名字是否在內(nèi)存中存在(幫助用戶不去使用一個(gè)不存在的函數(shù),讓代碼安全性更高)
func_get_arg():在自定義函數(shù)中去獲取指定數(shù)值對(duì)應(yīng)的參數(shù)
func_get_args():在自定義函數(shù)中獲取所有的參數(shù)(數(shù)組)
func_num_args():獲取當(dāng)前自定義函數(shù)的參數(shù)數(shù)量
自定義函數(shù)
"; function xiao($a,$b){ print_r(func_get_arg(1));echo "
";//獲取指定參數(shù) print_r(func_get_args());echo "
";//獲取所有參數(shù) print_r(func_num_args());;echo "
";//獲取參數(shù)數(shù)量 } xiao(1,2);//調(diào)用函數(shù) echo "
"; function_exists('xiao') && xiao(1,'2');//在調(diào)用函數(shù)時(shí),判斷指定的函數(shù)名字是否在內(nèi)存中存在(幫助用戶不去使用一個(gè)不存在的函數(shù),讓代碼安全性更高)以上就是關(guān)于“PHP函數(shù)及作用域的知識(shí)點(diǎn)有哪些”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞名稱:PHP函數(shù)及作用域的知識(shí)點(diǎn)有哪些
本文地址:http://weahome.cn/article/jcjoji.html