Home >Backend Development >PHP Tutorial >Detailed explanation of PHP functions and scope knowledge

Detailed explanation of PHP functions and scope knowledge

WBOY
WBOYforward
2022-05-25 13:38:015724browse

This article brings you relevant knowledge about PHP, which mainly introduces related issues about functions and scope, including function naming conventions, function return values, variable functions, Anonymous functions, etc., let’s take a look at them below, I hope it will be helpful to everyone.

Detailed explanation of PHP functions and scope knowledge

## Recommended study: "

PHP Video Tutorial"

1. Basic Concepts

                  #Function: function is a grammatical structure that encapsulates a code block (multiple lines of code) that implements a certain function into a structure, thereby enabling code reuse (reuse).

2. Basic syntax

                                                         

function has several corresponding key points:
function keyword, Function name, parameters (formal parameters and actual parameters), function body and return value.

The basic syntax is as follows:

Function 函数名([参数]){

         //函数体,基本上所有的代码都可以实现,定义变量、定义常量、使用流程控制(分支、循环)、可以调用函数。
         //返回值:return 结果;
}

The purpose of defining functions:

is to achieve code reuse, one function per function ( easy to understand).

The function is called during the code execution phase and when the function name is encountered, not during the compilation phase. Function calling characteristics:

As long as the system can find the corresponding function in the memory, it can be executed (the function can be called before the function is defined) Memory analysis of function execution:

Read the code into the code segment (compile: change the code into Bytecode is stored in memory)

  • Execute line by line according to the code - Compilation and execution are separated (compile first and then execute)
  • 3. Function naming convention
       

Naming convention: consists of letters, numbers and underscores, but cannot start with a number. As a commonly used structure, functions generally follow the following rules: The name of a function usually represents the function of the function, and some functions are more complex. One word may not be enough to express them, and multiple combinations are needed.

Camel case method: Except for the first word on the left, the first letters of all following words are capitalized: showParentInfo()

  1. Underlining method: Words are connected by underlines, and the words are all lowercase: show_parent_info()
  2. 4. Formal parameters and actual parameters

Formal parameters: Formal parameters, parameters that have no actual meaning, are parameters used when defining a function.

Actual parameters: Actual parameters, parameters with practical meaning, are parameters used when calling functions.

The relationship between the two: the formal parameter is the carrier of the actual parameter: when the actual parameter is called, it usually needs to be passed into the function to participate in the calculation (operation), then You need to find the location of the actual data inside the function to find the data itself: when you need to actually call it, pass the data to the formal parameters in the form of actual parameters: assign values ​​to the formal parameters, so that external data can be used inside the function.

<h3>函数参数形参和实参</h3>
<?php
	header("Content-type:text/html;charset=gbk");
	//定义函数
	function jia($a,$b){  //形参可以有多个,逗号,隔开
		echo $a + $b;//函数体使用形参运算
	};
	$num = 10;//定义实参
	jia($num,2);//传入实参,实参可以是变量、常量、运算结果等
?>

  • 在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
?>

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


六、实参引用传递

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

基本定义语法:

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>";
?>

 思考:两者对比,为什么第二个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());

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

<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;

  • 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();//调用函数

2.局部变量

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

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

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

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

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();//调用函数

(2)外部调用内部

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

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();//再调一次

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


九、可变函数

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

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

附加思考:

<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>","懵了吧,多想想就懂了!";
	//懵了吧,多想想就懂了!!


十、匿名函数

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

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


十一、闭包函数

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

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

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

<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();


十二、伪类型

        伪类型:假类型,实际上在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");

(三)关于数学的函数

  • 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');//在调用函数时,判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)

推荐学习:《PHP视频教程

The above is the detailed content of Detailed explanation of PHP functions and scope knowledge. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:csdn.net. If there is any infringement, please contact admin@php.cn delete