>백엔드 개발 >PHP 튜토리얼 >PHP 함수 및 범위 지식에 대한 자세한 설명

PHP 함수 및 범위 지식에 대한 자세한 설명

WBOY
WBOY앞으로
2022-05-25 13:38:015725검색

이 글은 함수 명명 규칙, 함수 반환 값, 변수 함수, 익명 함수 등 함수와 범위에 관한 문제를 주로 소개하는 PHP에 대한 관련 지식을 제공합니다. 함께 살펴보길 바랍니다. 모두에게 도움이 될 것입니다.

PHP 함수 및 범위 지식에 대한 자세한 설명

추천 학습: "PHP 비디오 튜토리얼"

1. 기본 개념

                            기능: 함수는 코드 블록(다중)을 캡슐화하는 문법 구조입니다. 여러 줄의 코드) 특정 기능을 코드 재사용(재사용)을 달성하기 위한 구조입니다. 2. 기본 문법

함수에는
함수 키워드, 함수 이름, 매개변수(형식 매개변수 및 고체 인삼), 함수 본문 및 반환 값 등 여러 가지 해당 핵심 사항이 있습니다.

기본 구문은 다음과 같습니다.

Function 函数名([参数]){

         //函数体,基本上所有的代码都可以实现,定义变量、定义常量、使用流程控制(分支、循环)、可以调用函数。
         //返回值:return 结果;
}
함수 정의의 목적: 함수당 하나의 함수(간단하고 명확함)로 코드 재사용을 실현하는 것입니다.

​​​​​​​​​ 컴파일 단계가 아닌 코드 실행 단계에서 함수 이름이 발견되면 함수가 호출됩니다. 함수 호출 특성:

시스템이 메모리에서 해당 함수를 찾을 수 있는 한 실행할 수 있습니다(함수가 정의되기 전에 함수를 호출할 수 있음)

함수 실행에 대한 메모리 분석:

코드를 읽고 코드 세그먼트 입력(컴파일: 코드를 바이트코드로 변환하여 메모리에 저장)

코드에 따라 한 줄씩 실행 -
    컴파일과 실행을 분리(컴파일) 먼저 실행한 후 실행)
  • 3. 함수 명명 규칙
  • ​​​​​
명명 규칙: 문자, 숫자, 밑줄로 구성되지만 숫자로 시작할 수 없습니다. 일반적으로 사용되는 구조로서 함수는 일반적으로 다음과 같은 규칙을 따릅니다. 함수의 이름은 일반적으로 함수의 함수를 나타내며, 일부 함수는 더 복잡하여 한 단어로 표현하기에는 충분하지 않으며 여러 조합이 필요합니다.

카멜 케이스 방식: 왼쪽의 첫 번째 단어를 제외하고 이후의 모든 단어의 첫 글자는 대문자로 표시: showParentInfo()

  1. Underline 방식: 단어는 밑줄로 연결되며, 단어는 소문자: show_parent_info()
  2. 4. 형식 매개변수와 실제 매개변수
형식 매개변수: 형식 매개변수, 실제 의미가 없는 매개변수는 함수를 정의할 때 사용되는 매개변수입니다.

실제 매개변수: 실제 매개변수, 실용적인 의미를 지닌 매개변수는 함수를 호출할 때 사용되는 매개변수입니다.

둘 사이의 관계: 형식 매개변수는 실제 매개변수의 전달자입니다. 실제 매개변수가 호출되면 일반적으로 계산(연산)에 참여하기 위해 함수에 전달되어야 하므로 함수 내에서 실제 데이터의 위치를 ​​찾아야 함. 데이터 자체 찾기 : 실제로 호출되면 데이터를 실제 매개변수 형태로 형식 매개변수에 전달: 형식 매개변수에 값을 할당하여 외부 함수 내에서 데이터를 사용할 수 있습니다.

<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视频教程

위 내용은 PHP 함수 및 범위 지식에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제