溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP函數(shù)及作用域的知識點有哪些

發(fā)布時間:2022-05-25 14:23:53 來源:億速云 閱讀:162 作者:iii 欄目:編程語言

這篇“PHP函數(shù)及作用域的知識點有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“PHP函數(shù)及作用域的知識點有哪些”文章吧。

PHP函數(shù)及作用域的知識點有哪些

一、基本概念

函數(shù):function,是一種語法結(jié)構(gòu),將實現(xiàn)某一個功能的代碼塊(多行代碼)封裝到一個結(jié)構(gòu)中,從而實現(xiàn)代碼的重復利用(復用)。


二、基本語法

函數(shù)有幾個對應(yīng)的關(guān)鍵點:function關(guān)鍵字、函數(shù)名、參數(shù)(形參和實參)、函數(shù)體和返回值。

基本語法如下:

Function 函數(shù)名([參數(shù)]){

         //函數(shù)體,基本上所有的代碼都可以實現(xiàn),定義變量、定義常量、使用流程控制(分支、循環(huán))、可以調(diào)用函數(shù)。
         //返回值:return 結(jié)果;
}

定義函數(shù)的目的:是為了實現(xiàn)代碼的重復利用,一個功能一個函數(shù)(簡單明了)。

PHP函數(shù)及作用域的知識點有哪些

函數(shù)是在代碼執(zhí)行階段,碰到函數(shù)名字的時候才會調(diào)用,不是在編譯階段。函數(shù)的調(diào)用特點:只要系統(tǒng)在內(nèi)存中能夠找到對應(yīng)的函數(shù),就可以執(zhí)行(函數(shù)的調(diào)用可以在函數(shù)定義之前)

函數(shù)執(zhí)行的內(nèi)存分析:

  • 讀取代碼進入到代碼段(編譯:將代碼變成字節(jié)碼存儲到內(nèi)存)

  • 根據(jù)代碼逐行執(zhí)行——編譯和執(zhí)行是分開的(先編譯后執(zhí)行)


三、函數(shù)命名規(guī)范

命名規(guī)范:由字母、數(shù)字和下劃線組成,但是不能以數(shù)字開頭。函數(shù)作為一種常用的結(jié)構(gòu),一般遵循以下規(guī)則:函數(shù)通常名字代表著函數(shù)的功能,而有些功能會比較復雜,可能一個單詞不足以表達,需要多個組合。

  1. 駝峰法:除了左邊第一個單詞外,后面所有的單詞首字母都大寫:showParentInfo()

  2. 劃線法:單詞之間通過下劃線連接,單詞都是小寫:show_parent_info()


四、形參和實參

形參:形式參數(shù),不具有實際意義的參數(shù),是在函數(shù)定義時使用的參數(shù)。

實參:實際參數(shù),具有實際意義的參數(shù),是在函數(shù)調(diào)用時使用的參數(shù)。

兩者關(guān)系:形參是實參的載體:實參在調(diào)用時通常是需要傳入到函數(shù)內(nèi)部參與計算(運算),那么需要在函數(shù)內(nèi)部去找到實際數(shù)據(jù)所在的位置才能找到數(shù)據(jù)本身:需要實際調(diào)用的時候,將數(shù)據(jù)以實參的形式傳遞給形參:給形參賦值,從而使得函數(shù)內(nèi)部可以用到外部數(shù)據(jù)。

<h4>函數(shù)參數(shù)形參和實參</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	//定義函數(shù)
	function jia($a,$b){  //形參可以有多個,逗號,隔開
		echo $a + $b;//函數(shù)體使用形參運算
	};
	$num = 10;//定義實參
	jia($num,2);//傳入實參,實參可以是變量、常量、運算結(jié)果等
?>

PHP函數(shù)及作用域的知識點有哪些

  • 在PHP中允許實參多余形參(個數(shù)):函數(shù)內(nèi)部不用而已

  • 在PHP中理論上形參個數(shù)沒有限制(實際開發(fā)不會太多)

  • 實參不能少于形參個數(shù)。

PHP函數(shù)及作用域的知識點有哪些


五、形參默認值

默認值:default value,指的是形參的默認值,在函數(shù)定義的時候,就給形參進行一個初始賦值:如果實際調(diào)用傳入的參數(shù)(實參)沒有提供,那么形參就會使用定義時的值來進入函數(shù)內(nèi)部參與運算。通常默認值是用在一些,一定會有某個數(shù)據(jù)參與,但是可能通常是某個我們知道的值。

<h4>形參默認值</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	$a = 10;//定義實參
	//定義函數(shù)
	function jia($a = 6,$b = 4){  //此時$a是實參,編譯不執(zhí)行,屬于jia函數(shù)內(nèi)部,跟外面的$a=10不沖突。
		echo $a + $b;//10 + 4 = 14
	};
	jia($a);//調(diào)用$a,有傳參就是10,$b是4,所以值就是14
	echo "<hr/>";
	echo $a;//10
?>

PHP函數(shù)及作用域的知識點有哪些

       注意:默認值的定義是放在最右邊的(多個),不能左邊形參有默認值,但是右邊沒有函數(shù)外部定義的變量名字與函數(shù)定義的形參名字沖突(同名)是沒有任何關(guān)聯(lián)關(guān)系的;如果多個函數(shù)使用同樣的形參名字也不沖突。


六、實參引用傳遞

實參在調(diào)用時會將值賦值給形參,那么實際上使用的方式就是一種簡單的值傳遞:將實參(如果是變量或者常量或者其他表達式)的結(jié)果(值)取出來賦值給形參:形參與外部實際傳入的參數(shù)本身沒有任何關(guān)聯(lián)關(guān)系:只是結(jié)果一樣。有的時候,希望在函數(shù)內(nèi)部拿到的外部數(shù)據(jù),能夠在函數(shù)內(nèi)部改變,那么就需要明確告知函數(shù)(定義時),函數(shù)才會在調(diào)用的時候去主動獲取外部數(shù)據(jù)的內(nèi)存地址。以上這種定義形式參數(shù)的方式叫作引用傳值。

基本定義語法:

Function 函數(shù)名(形參1,&形參2){

        //函數(shù)體

}

<h4>引用傳遞</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiao($x,&$y){ //定義函數(shù)xiao()
		$x = $x * $x;
		$y = $y * $y; //修改兩個形參的值
		echo $x;echo "<hr>";echo $y,"<hr>";
	};
	$x = 4;$y = 2;//定義變量
	xiao($x,$y);
	echo $x,"<hr>",$y,"<hr>";
?>

PHP函數(shù)及作用域的知識點有哪些PHP函數(shù)及作用域的知識點有哪些

思考:兩者對比,為什么第二個y變成了4?

參考:php——三篇夯實根基第一篇_xiaochuhe.的博客-CSDN博客里面的變量引用賦值。

注意:引用傳值注意事項:在傳入實參的時候,必須傳入變量!?。?/strong>


七、函數(shù)返回值(return)

返回值:return,指的是將函數(shù)實現(xiàn)的結(jié)果,通過return關(guān)鍵字,返回給函數(shù)外部(函數(shù)調(diào)用處):在PHP中所有的函數(shù)都有返回值。(如果沒有明確return使用,那么系統(tǒng)默認返回NULL。

<h4>函數(shù)返回值</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	function chuhe(){//定義函數(shù)
		echo __FUNCTION__;echo '<hr/>';//輸出當前函數(shù)的名稱
		echo __FILE__;echo '<hr/>';//輸出當前文件名的絕對路徑
	};
	//chuhe();echo '<hr>';
	var_dump(chuhe());

PHP函數(shù)及作用域的知識點有哪些

返回值作用:將計算結(jié)果返回給調(diào)用處,并且函數(shù)的返回值可以是任意數(shù)據(jù)類型。

<h4>函數(shù)返回值——Retrun</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	function jia($x,$y){
		return $x + $y;//return直接結(jié)束jia函數(shù)
		echo $x; //注意,此時echo函數(shù)不執(zhí)行
	};
	$num =jia(4,5);//9
	echo $num;

PHP函數(shù)及作用域的知識點有哪些

  • return在函數(shù)內(nèi)部存在的價值:返回當前函數(shù)的結(jié)果(當前函數(shù)運行結(jié)束)

  • return還可以在文件中直接使用(不在函數(shù)里面):代表文件將結(jié)果return后面跟的內(nèi)容,轉(zhuǎn)交給包含當前文件的位置。(通常在系統(tǒng)配置文件中使用較多),在文件中也代表中終止文件后面的代碼:return之后的內(nèi)容不會執(zhí)行。


八、作用域

作用域:變量(常量)能夠被訪問的區(qū)域

  • 變量可以在普通代碼中定義

  • 變量也可以在函數(shù)內(nèi)部定義

作用域分類:

  1. 全局變量

  2. 局部變量

  3. 超全局變量

1.全局變量

全局變量:就是用戶普通定義的變量(函數(shù)外部定義)

所屬全局空間:在PHP中只允許在全局空間使用:理論上函數(shù)內(nèi)部不可方法

腳本周期:直到腳本運行結(jié)束(最后一行代碼執(zhí)行完)

<h4>全局變量</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	$global = "這是全局變量!"; //定義變量
	function chuhe(){ 
		$inner = __FILE__;//局部變量
		echo $global; //肯定是報錯的,函數(shù)內(nèi)部肯定是訪問不了全局變量滴
	};
	chuhe();//調(diào)用函數(shù)

PHP函數(shù)及作用域的知識點有哪些2.局部變量

局部變量:就是在函數(shù)內(nèi)部定義的變量

所屬當前函數(shù)空間:在PHP中只允許在當前函數(shù)自己內(nèi)部使用

函數(shù)周期:函數(shù)執(zhí)行結(jié)束(函數(shù)是在棧區(qū)中開辟獨立內(nèi)存空間運行)

<h4>局部變量</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	$global = "這是全局變量!"; //定義變量
	function chuhe(){ 
		$inner = __FILE__;//局部變量
		//echo $global; //肯定是報錯的,函數(shù)內(nèi)部肯定是訪問不了全局變量滴
	};
	chuhe();//調(diào)用函數(shù)
	echo $inner;//訪問局部變量,也是報錯的

PHP函數(shù)及作用域的知識點有哪些

3. 超全局變量

超全局變量:系統(tǒng)定義的變量(預定義變量:$_SERVER、$_POST等)

所屬超全局空間:沒有訪問限制(函數(shù)內(nèi)外都可以訪問)

       超全局變量會將全局變量自動納入到$GLOBALS里面,而$GLOBALS沒有作用域限制,所以能夠幫助局部去訪問全局變量:但是必須使用數(shù)組方式。

(1)內(nèi)部調(diào)用外部

<h4>超全局變量</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	$global = "這是全局變量!"; //定義變量
	function chuhe(){ 
		$inner = __FILE__;//局部變量
		echo $GLOBALS['global'];//講全局變量納入$GLOBALS里面
	};
	chuhe();//調(diào)用函數(shù)

PHP函數(shù)及作用域的知識點有哪些

(2)外部調(diào)用內(nèi)部

<h4>超全局變量</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	$global = "這是全局變量!"; //定義變量
	function chuhe(){
		global $inner; //定義變量,使用全局變量。
		$inner = __FILE__;//局部變量
					
	};
	chuhe();echo $inner;//調(diào)用函數(shù),并訪問局部變量

PHP函數(shù)及作用域的知識點有哪些

4.靜態(tài)變量

靜態(tài)變量:static,是在函數(shù)內(nèi)部定義的變量,使用static關(guān)鍵字修飾,用來實現(xiàn)跨函數(shù)共享數(shù)據(jù)的變量:函數(shù)運行結(jié)束所有局部變量都會清空,如果重新運行一下函數(shù),所有的局部變量又會重新初始化。

基本語法:

Function 函數(shù)名(){

        //定義變量

        Static $變量名 = 值;               //通常會在定義的時候就直接賦值

}

<h4>靜態(tài)變量</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiao(){
		$a = 2;//定義變量
		static $b = 3;//定義靜態(tài)變量
		echo $a++;echo "<hr>";
		echo $b++;echo "<hr>";
	};
	xiao();//調(diào)用函數(shù)
	xiao();//再調(diào)一次
	xiao();//再調(diào)一次

PHP函數(shù)及作用域的知識點有哪些

       靜態(tài)變量的作用是為了跨函數(shù)共享數(shù)據(jù)(同一個函數(shù)被多次調(diào)用) 。


九、可變函數(shù)

當前有一個變量所保存到值,剛好是一個函數(shù)的名字,那么就可以使用變量+()來充當函數(shù)名使用。

<h4>可變函數(shù)</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	function chu(){
		echo __FILE__;echo __FUNCTION__;echo __LINE__;
	}
	$xiao = "chu";//定義變量
	$xiao();//調(diào)用可用函數(shù)

PHP函數(shù)及作用域的知識點有哪些

附加思考:

<h4>可變函數(shù)</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiao($a,$b){ //假設(shè)定義系統(tǒng)函數(shù)
		$b = $b + 6;
		return $a($b);//chuhe(16)
	}
	function chuhe($c){
		return $c * $c * $c;  //定義一個用戶函數(shù),求該函數(shù)的3次方
	}
	echo xiao('chuhe',10);//16*16*16
	echo "<br>","懵了吧,多想想就懂了!";
	//懵了吧,多想想就懂了?。?/pre>

PHP函數(shù)及作用域的知識點有哪些


十、匿名函數(shù)

沒有名字的函數(shù),變量保存匿名函數(shù),本質(zhì)得到的是一個對象(Closure)。

<h4>函數(shù)</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	$xiaofeng = function(){ //定義匿名函數(shù)
		echo "我是蕭風!";
	};
	$xiaofeng();echo "<hr>";//調(diào)用匿名函數(shù)
	var_dump($xiaofeng);//查案變量類型及內(nèi)容

PHP函數(shù)及作用域的知識點有哪些


十一、閉包函數(shù)

閉包:closure, 一詞來源于以下兩者的結(jié)合:要執(zhí)行的代碼塊(由于自由變量被包含在代碼塊中,這些自由變量以及它們引用的對象沒有被釋放)和為自由變量提供綁定的計算環(huán)境(作用域)簡單理解:函數(shù)內(nèi)部有一些局部變量(要執(zhí)行的代碼塊)在函數(shù)執(zhí)行之后沒有被釋放,是因為在函數(shù)內(nèi)部還有對應(yīng)的函數(shù)在引用(函數(shù)的內(nèi)部函數(shù):匿名函數(shù))

<h4>閉包函數(shù)</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiaofeng(){
		$inner = __FILE__;//定義局部變量
		#定義匿名函數(shù)
		$chuhe = function() use($inner){//用use講局部變量保留給內(nèi)部使用閉包
			echo $inner;
		};
		$chuhe();//調(diào)用函數(shù)
	}
	xiaofeng();

PHP函數(shù)及作用域的知識點有哪些

思考:函數(shù)使用完后局部變量有沒有被釋放?

<h4>閉包函數(shù)</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiaofeng(){
		$inner = __FILE__;//定義局部變量
		#定義匿名函數(shù)
		$chuhe = function() use($inner){//用use講局部變量保留給內(nèi)部使用閉包
			echo $inner;
		};
		return $chuhe();//返回內(nèi)部匿名函數(shù)
	}
	$closure = xiaofeng();//理論上局部變量inner已經(jīng)釋放了
	$closure();

PHP函數(shù)及作用域的知識點有哪些


十二、偽類型

 偽類型:假類型,實際上在PHP中不存在的類型。但是通過偽類型可以幫助程序員去更好的查看操作手冊從而更方便學習。

偽類型主要有兩種:在三大類八小類之外

  • Mixed:混合的,可以是多種PHP中的數(shù)據(jù)類型

  • Number:數(shù)值的,可以是任意數(shù)值類型(整形和浮點型)


十三、常用系統(tǒng)函數(shù)

(一)關(guān)于輸出的函數(shù)

  • print():類似于echo輸出提供的內(nèi)容,本質(zhì)是一種結(jié)構(gòu)(不是函數(shù)),返回1,可以不需要使用括號

  • print_r():類似于var_dump,但是比var_dump簡單,不會輸出數(shù)據(jù)的類型,只會輸出值(數(shù)組打印使用比較多)

(二)關(guān)于時間的函數(shù)

  • date():按照指定格式對對應(yīng)的時間戳(從1970年格林威治時間開始計算的秒數(shù)),如果沒有指定特定的時間戳,那么就是默認解釋當前時間戳

PHP函數(shù)及作用域的知識點有哪些

  • time():獲取當前時間對應(yīng)的時間戳

  • microtime():獲取微秒級別的時間

  • Strtotime():按照規(guī)定格式的字符串轉(zhuǎn)換成時間戳

<h4>時間函數(shù)</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	echo date('Y 年 m 月 d 日 H:i:s',987654321);echo "<hr>";
	echo time();echo "<hr>";
	echo microtime();echo "<hr>";
	echo strtotime(" 10 hours");

PHP函數(shù)及作用域的知識點有哪些

(三)關(guān)于數(shù)學的函數(shù)

  • max():指定參數(shù)中最大的值

  • min():比較兩個數(shù)中較小的值

  • rand():得到一個隨機數(shù),指定區(qū)間的隨機整數(shù)

  • mt_rand():與rand一樣,只是底層結(jié)構(gòu)不一樣,效率比rand高(建議使用)

  • round():四舍五入

  • ceil():向上取整

  • floor():向下取整

  • pow():求指定數(shù)字的指定指數(shù)次結(jié)果:pow(2,8) == 2^8 == 256

  • abs():絕對值

  • sqrt():求平方根

(四)關(guān)于自定義函數(shù)的函數(shù)

  • function_exists():判斷指定的函數(shù)名字是否在內(nèi)存中存在(幫助用戶不去使用一個不存在的函數(shù),讓代碼安全性更高)

  • func_get_arg():在自定義函數(shù)中去獲取指定數(shù)值對應(yīng)的參數(shù)

  • func_get_args():在自定義函數(shù)中獲取所有的參數(shù)(數(shù)組)

  • func_num_args():獲取當前自定義函數(shù)的參數(shù)數(shù)量

<h4>自定義函數(shù)</h4>
<?php
	header("Content-type:text/html;charset=gbk");
	echo "<pre>";
	function xiao($a,$b){
		print_r(func_get_arg(1));echo "<hr>";//獲取指定參數(shù)
		print_r(func_get_args());echo "<hr>";//獲取所有參數(shù)
		print_r(func_num_args());;echo "<hr>";//獲取參數(shù)數(shù)量
		
	}
	xiao(1,2);//調(diào)用函數(shù)
	echo "<br>";
	function_exists('xiao') && xiao(1,'2');//在調(diào)用函數(shù)時,判斷指定的函數(shù)名字是否在內(nèi)存中存在(幫助用戶不去使用一個不存在的函數(shù),讓代碼安全性更高)

PHP函數(shù)及作用域的知識點有哪些

以上就是關(guān)于“PHP函數(shù)及作用域的知識點有哪些”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI