Penjelasan terperinci tentang fungsi PHP dan pengetahuan skop

WBOY
Lepaskan: 2023-04-11 06:32:02
ke hadapan
5646 orang telah melayarinya

Artikel ini membawa anda pengetahuan yang berkaitan tentang PHP, yang terutamanya memperkenalkan isu yang berkaitan dengan fungsi dan skop, termasuk konvensyen penamaan fungsi, nilai pulangan fungsi, fungsi pembolehubah, fungsi Tanpa Nama, dsb., mari kita lihat pada mereka di bawah, saya harap ia akan membantu semua orang.

Penjelasan terperinci tentang fungsi PHP dan pengetahuan skop

Disyorkan kajian: "Tutorial Video PHP"

1. Konsep Asas

              : fungsi ialah struktur tatabahasa. Merangkumkan blok kod (berbilang baris kod) yang melaksanakan fungsi tertentu ke dalam struktur, dengan itu mencapai penggunaan semula kod (penggunaan semula).


2. Sintaks asas

Nama fungsi, parameter (parameter formal dan parameter sebenar), isi fungsi dan nilai pulangan.

Sintaks asas adalah seperti berikut:

Tujuan mentakrifkan fungsi:
Function 函数名([参数]){

         //函数体,基本上所有的代码都可以实现,定义变量、定义常量、使用流程控制(分支、循环)、可以调用函数。
         //返回值:return 结果;
}
Salin selepas log masuk
adalah untuk mencapai penggunaan semula kod, satu fungsi setiap fungsi Fungsi (biasa dan ringkas).

                                                                                                                                                                                                                                                                                   fungsi dipanggil hanya apabila nama fungsi ditemui semasa fasa pelaksanaan kod, bukan semasa fasa penyusunan. Ciri-ciri panggilan fungsi:

Selagi sistem boleh mencari fungsi yang sepadan dalam ingatan, ia boleh dilaksanakan (fungsi boleh dipanggil sebelum fungsi ditakrifkan) Analisis memori pelaksanaan fungsi:

Baca kod ke dalam segmen kod (kompilasi : tukar kod menjadi Bytecode disimpan dalam ingatan)

  • Dilaksanakan baris demi baris mengikut kod - Kompilasi dan pelaksanaan dipisahkan (kompil dahulu dan kemudian laksanakan)
  • Tiga, spesifikasi penamaan berfungsi

Spesifikasi penamaan: terdiri daripada huruf, nombor dan baris bawah , tetapi tidak boleh bermula dengan nombor. Sebagai struktur yang biasa digunakan, fungsi secara amnya mengikut peraturan berikut: Nama fungsi biasanya mewakili fungsi fungsi, dan beberapa fungsi lebih kompleks Satu perkataan mungkin tidak mencukupi untuk menyatakannya, dan berbilang kombinasi diperlukan.

Kaedah sarung unta: Kecuali perkataan pertama di sebelah kiri, huruf pertama semua perkataan berikut ditulis dengan huruf besar: showParentInfo()

  1. Kaedah menggariskan: perkataan disambungkan dengan garis bawah dan perkataan semuanya huruf kecil: show_parent_info()
  2. 4. Parameter formal dan parameter sebenar

Parameter formal: parameter formal, parameter tanpa makna sebenar, ialah parameter yang digunakan semasa mentakrifkan fungsi.

Parameter sebenar: Parameter sebenar, parameter dengan makna praktikal, ialah parameter yang digunakan semasa memanggil fungsi.

Hubungan antara keduanya: parameter formal ialah pembawa parameter sebenar: parameter sebenar biasanya perlu dihantar ke dalam fungsi untuk mengambil bahagian dalam pengiraan (operasi) apabila memanggil, maka Anda perlu mencari lokasi data sebenar di dalam fungsi untuk mencari data itu sendiri: apabila anda perlu benar-benar memanggilnya, hantar data kepada parameter rasmi dalam bentuk parameter sebenar: tetapkan nilai kepada parameter formal, supaya data luaran boleh digunakan di dalam fungsi.

  • 在PHP中允许实参多余形参(个数):函数内部不用而已
  • 在PHP中理论上形参个数没有限制(实际开发不会太多)
  • 实参不能少于形参个数。


五、形参默认值

        默认值:default value,指的是形参的默认值,在函数定义的时候,就给形参进行一个初始赋值:如果实际调用传入的参数(实参)没有提供,那么形参就会使用定义时的值来进入函数内部参与运算。通常默认值是用在一些,一定会有某个数据参与,但是可能通常是某个我们知道的值。

<h3>形参默认值</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	$a = 10;//定义实参
	//定义函数
	function jia($a = 6,$b = 4){  //此时$a是实参,编译不执行,属于jia函数内部,跟外面的$a=10不冲突。
		echo $a + $b;//10 + 4 = 14
	};
	jia($a);//调用$a,有传参就是10,$b是4,所以值就是14
	echo "<hr/>";
	echo $a;//10
?>
Salin selepas log masuk

        注意:默认值的定义是放在最右边的(多个),不能左边形参有默认值,但是右边没有函数外部定义的变量名字与函数定义的形参名字冲突(同名)是没有任何关联关系的;如果多个函数使用同样的形参名字也不冲突。


六、实参引用传递

        实参在调用时会将值赋值给形参,那么实际上使用的方式就是一种简单的值传递:将实参(如果是变量或者常量或者其他表达式)的结果(值)取出来赋值给形参:形参与外部实际传入的参数本身没有任何关联关系:只是结果一样。有的时候,希望在函数内部拿到的外部数据,能够在函数内部改变,那么就需要明确告知函数(定义时),函数才会在调用的时候去主动获取外部数据的内存地址。以上这种定义形式参数的方式叫作引用传值。

基本定义语法:

Function 函数名(形参1,&形参2){

         //函数体

}

<h3>引用传递</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiao($x,&$y){ //定义函数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>";
?>
Salin selepas log masuk

 思考:两者对比,为什么第二个y变成了4?

参考:php——三篇夯实根基第一篇_xiaochuhe.的博客-CSDN博客里面的变量引用赋值。

注意:引用传值注意事项:在传入实参的时候,必须传入变量!!!


七、函数返回值(return)

        返回值:return,指的是将函数实现的结果,通过return关键字,返回给函数外部(函数调用处):在PHP中所有的函数都有返回值。(如果没有明确return使用,那么系统默认返回NULL。

<h3>函数返回值</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	function chuhe(){//定义函数
		echo __FUNCTION__;echo &#39;<hr/>';//输出当前函数的名称
		echo __FILE__;echo '<hr/>';//输出当前文件名的绝对路径
	};
	//chuhe();echo '<hr>';
	var_dump(chuhe());
Salin selepas log masuk

 返回值作用:将计算结果返回给调用处,并且函数的返回值可以是任意数据类型

<h3>函数返回值——Retrun</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	function jia($x,$y){
		return $x + $y;//return直接结束jia函数
		echo $x; //注意,此时echo函数不执行
	};
	$num =jia(4,5);//9
	echo $num;
Salin selepas log masuk

  • return在函数内部存在的价值:返回当前函数的结果(当前函数运行结束)
  • return还可以在文件中直接使用(不在函数里面):代表文件将结果return后面跟的内容,转交给包含当前文件的位置。(通常在系统配置文件中使用较多),在文件中也代表中终止文件后面的代码:return之后的内容不会执行。

八、作用域

作用域:变量(常量)能够被访问的区域

  • 变量可以在普通代码中定义
  • 变量也可以在函数内部定义

作用域分类:

  1. 全局变量
  2. 局部变量
  3. 超全局变量

1.全局变量

全局变量:就是用户普通定义的变量(函数外部定义)

所属全局空间:在PHP中只允许在全局空间使用:理论上函数内部不可方法

脚本周期:直到脚本运行结束(最后一行代码执行完)

<h3>全局变量</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	$global = "这是全局变量!"; //定义变量
	function chuhe(){ 
		$inner = __FILE__;//局部变量
		echo $global; //肯定是报错的,函数内部肯定是访问不了全局变量滴
	};
	chuhe();//调用函数
Salin selepas log masuk

2.局部变量

局部变量:就是在函数内部定义的变量

所属当前函数空间:在PHP中只允许在当前函数自己内部使用

函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行)

<h3>局部变量</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	$global = "这是全局变量!"; //定义变量
	function chuhe(){ 
		$inner = __FILE__;//局部变量
		//echo $global; //肯定是报错的,函数内部肯定是访问不了全局变量滴
	};
	chuhe();//调用函数
	echo $inner;//访问局部变量,也是报错的
Salin selepas log masuk

3. 超全局变量

超全局变量:系统定义的变量(预定义变量:$_SERVER、$_POST等)

所属超全局空间:没有访问限制(函数内外都可以访问)

        超全局变量会将全局变量自动纳入到$GLOBALS里面,而$GLOBALS没有作用域限制,所以能够帮助局部去访问全局变量:但是必须使用数组方式。

(1)内部调用外部

<h3>超全局变量</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	$global = "这是全局变量!"; //定义变量
	function chuhe(){ 
		$inner = __FILE__;//局部变量
		echo $GLOBALS['global'];//讲全局变量纳入$GLOBALS里面
	};
	chuhe();//调用函数
Salin selepas log masuk

(2)外部调用内部

<h3>超全局变量</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	$global = "这是全局变量!"; //定义变量
	function chuhe(){
		global $inner; //定义变量,使用全局变量。
		$inner = __FILE__;//局部变量
					
	};
	chuhe();echo $inner;//调用函数,并访问局部变量
Salin selepas log masuk

4.静态变量

        静态变量:static,是在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量:函数运行结束所有局部变量都会清空,如果重新运行一下函数,所有的局部变量又会重新初始化。

基本语法:

Function 函数名(){

         //定义变量

         Static $变量名 = 值;               //通常会在定义的时候就直接赋值

}

<h3>静态变量</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiao(){
		$a = 2;//定义变量
		static $b = 3;//定义静态变量
		echo $a++;echo "<hr>";
		echo $b++;echo "<hr>";
	};
	xiao();//调用函数
	xiao();//再调一次
	xiao();//再调一次
Salin selepas log masuk

         静态变量的作用是为了跨函数共享数据(同一个函数被多次调用) 。


九、可变函数

        当前有一个变量所保存到值,刚好是一个函数的名字,那么就可以使用变量+()来充当函数名使用

<h3>可变函数</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	function chu(){
		echo __FILE__;echo __FUNCTION__;echo __LINE__;
	}
	$xiao = "chu";//定义变量
	$xiao();//调用可用函数
Salin selepas log masuk

附加思考:

<h3>可变函数</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiao($a,$b){ //假设定义系统函数
		$b = $b + 6;
		return $a($b);//chuhe(16)
	}
	function chuhe($c){
		return $c * $c * $c;  //定义一个用户函数,求该函数的3次方
	}
	echo xiao(&#39;chuhe&#39;,10);//16*16*16
	echo "<br>","懵了吧,多想想就懂了!";
	//懵了吧,多想想就懂了!!
Salin selepas log masuk


十、匿名函数

        没有名字的函数,变量保存匿名函数,本质得到的是一个对象(Closure)。

<h3>函数</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	$xiaofeng = function(){ //定义匿名函数
		echo "我是萧风!";
	};
	$xiaofeng();echo "<hr>";//调用匿名函数
	var_dump($xiaofeng);//查案变量类型及内容
Salin selepas log masuk


十一、闭包函数

        闭包:closure, 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)简单理解:函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)

<h3>闭包函数</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiaofeng(){
		$inner = __FILE__;//定义局部变量
		#定义匿名函数
		$chuhe = function() use($inner){//用use讲局部变量保留给内部使用闭包
			echo $inner;
		};
		$chuhe();//调用函数
	}
	xiaofeng();
Salin selepas log masuk

思考:函数使用完后局部变量有没有被释放?

<h3>闭包函数</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	function xiaofeng(){
		$inner = __FILE__;//定义局部变量
		#定义匿名函数
		$chuhe = function() use($inner){//用use讲局部变量保留给内部使用闭包
			echo $inner;
		};
		return $chuhe();//返回内部匿名函数
	}
	$closure = xiaofeng();//理论上局部变量inner已经释放了
	$closure();
Salin selepas log masuk


十二、伪类型

        伪类型:假类型,实际上在PHP中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习。

伪类型主要有两种:在三大类八小类之外

  • Mixed:混合的,可以是多种PHP中的数据类型
  • Number:数值的,可以是任意数值类型(整形和浮点型)

十三、常用系统函数

(一)关于输出的函数

  • print():类似于echo输出提供的内容,本质是一种结构(不是函数),返回1,可以不需要使用括号
  • print_r():类似于var_dump,但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印使用比较多)

(二)关于时间的函数

  • date():按照指定格式对对应的时间戳(从1970年格林威治时间开始计算的秒数),如果没有指定特定的时间戳,那么就是默认解释当前时间戳

  • time():获取当前时间对应的时间戳
  • microtime():获取微秒级别的时间
  • Strtotime():按照规定格式的字符串转换成时间戳

<h3>时间函数</h3>
<?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");
Salin selepas log masuk

(三)关于数学的函数

  • max():指定参数中最大的值
  • min():比较两个数中较小的值
  • rand():得到一个随机数,指定区间的随机整数
  • mt_rand():与rand一样,只是底层结构不一样,效率比rand高(建议使用)
  • round():四舍五入
  • ceil():向上取整
  • floor():向下取整
  • pow():求指定数字的指定指数次结果:pow(2,8) == 2^8 == 256
  • abs():绝对值
  • sqrt():求平方根

(四)关于自定义函数的函数

  • function_exists():判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)
  • func_get_arg():在自定义函数中去获取指定数值对应的参数
  • func_get_args():在自定义函数中获取所有的参数(数组)
  • func_num_args():获取当前自定义函数的参数数量
<h3>自定义函数</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	echo "<pre class="brush:php;toolbar:false">";
	function xiao($a,$b){
		print_r(func_get_arg(1));echo "<hr>";//获取指定参数
		print_r(func_get_args());echo "<hr>";//获取所有参数
		print_r(func_num_args());;echo "<hr>";//获取参数数量
		
	}
	xiao(1,2);//调用函数
	echo "<br>";
	function_exists('xiao') && xiao(1,'2');//在调用函数时,判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)
Salin selepas log masuk

推荐学习:《PHP视频教程

Atas ialah kandungan terperinci Penjelasan terperinci tentang fungsi PHP dan pengetahuan skop. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan