PHP笔记3--函数、可变函数、匿名函数、闭包

函数

是一种语法结构,将实现某一个功能的代码块(多行代码)封装到一个结构中,从而实现代码的重复利用(复用)
函数定义语法

function sayHello(){
    
    
	echo 'Hello';
	}
//调用方法
sayHello();

示例

function sayHello(){
    
    
	echo 'Hello';
	}

命名规范
由字母、数字和下划线组成,但是不能以数字开头,一般采用如下两种方式命名
1、驼峰法:除了左边第一个单词外,后面所有的单词首字母都大写:showParentInfo()
2、下划线法:单词之间通过下划线连接,单词都是小写:show_parent_info()
参数详解
函数的参数分为两种:形参和实参
形参:形式参数,不具有实际意义的参数,是在函数定义时使用的参数
实参:实际参数,具有实际数据意义的参数,是在函数调用时使用的参数

默认值
指的是形参的默认值,在函数定义的时候,就给形参进行一个初始赋值:
如果实际调用传入的参数(实参)没有提供,那么形参就会使用定义时的值来进入函数内部参与运算。
示例:

//定义方法
function sayHello($name = 'zhagnsan'){
    
    
	echo 'Hello '.$name;
	}
//调用方法
sayHello();
sayHello('lisi');

默认值的定义是放在最右边的,不能左边形参有默认值,但是右边没有

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

function test($a,&$b){
    
    
	$a++;//修改值
	$b++;//修改值
	
	}
//test(1,1)//应用传递的参数 在传入实参的时候,必须传入变量 直接传值会报错

$a=1;$b=1;
test($a,$b);
echo $a,$b//1  2

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

作用域

作用域:变量(常量)能够被访问的区域
在PHP中作用域严格来说分为两种:但是PHP内部还定义一些在严格意义之外的一种,所以总共算三种:
1)全局变量:就是用户普通定义的变量(函数外部定义)
所属全局空间:在PHP中只允许在全局空间使用:理论上函数内部不可访问(但是可以通过 G L O B A L S 访 问 ) 脚 本 周 期 : 直 到 脚 本 运 行 结 束 ( 最 后 一 行 代 码 执 行 完 ) 2 ) 局 部 变 量 : 就 是 在 函 数 内 部 定 义 的 变 量 所 属 当 前 函 数 空 间 : 在 P H P 中 只 允 许 在 当 前 函 数 自 己 内 部 使 用 函 数 周 期 : 函 数 执 行 结 束 ( 函 数 是 在 栈 区 中 开 辟 独 立 内 存 空 间 运 行 ) 3 ) 超 全 局 变 量 : 系 统 定 义 的 变 量 ( 预 定 义 变 量 : GLOBALS 访问) 脚本周期:直到脚本运行结束(最后一行代码执行完) 2)局部变量:就是在函数内部定义的变量 所属当前函数空间:在PHP中只允许在当前函数自己内部使用 函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行) 3)超全局变量:系统定义的变量(预定义变量: GLOBALS访)2)PHP使3)_SERVER、$_POST等)
所属超全局空间:没有访问限制(函数内外都可以访问)

作用域示例:

$name ='zhangsan';

function test(){
    
    
	// echo $name; //函数内访问该变量会报错
	echo $GLOBALS['name'];//这样就可以访问
	}
	test();

还有一种方式,能够实现全局访问局部,同时局部也可以访问全局:global关键字
1、如果使用global定义的变量名在外部存在(全局变量),那么系统在函数内部定义的变量直接指向外部全局变量所指向的内存空间(等同于一个变量);
2、如果使用global定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同名的全局变量
本质:在函数的内部和外部,对一个同名变量(全局和局部)使用同一块内存地址保存数据,从而实现共同拥有
示例:

$name ='zhangsan';

function test(){
    
    
	global $name; //已经存在的变量 则 指向引用
	echo $name;//zhagnsan
	
	global $age; //不存在的变量 创建
	$age =12;
	}
	test();
	echo $age;//12

静态变量

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

 	function test(){
    
    
	static $age =1; 
	$age++;
  echo $age;
	}
	test();//2
  test(); //3

可变函数

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

function test(){
    
    
	static $age =1; 
	$age++;
  echo $age;
	}
$name = 'test';
$name();//输出 2  可以调用test 函数

匿名函数

没有名字的函数
基本语法:

变量名 = function(){
    
    
	函数体
};

示例:

$test = function(){
    
    
	echo 'hello';
	};
	$test();

闭包

闭包简单理解就是一个函数根据参数,返回一个匿名函数,然后调用匿名函数实现功能
示例:

function test(){
    
    
	$name =__FUNCTION__;
	$innerfunc = function ()use($name){
    
    
		echo $name;
		};
	return 	$innerfunc;
	}
	$test1 = test();
	$test1();//test

伪类型

假类型,实际上在PHP中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习
伪类型主要有两种:在三大类八小类之外
Mixed:混合的,可以是多种PHP中的数据类型
Number:数值的,可以是任意数值类型(整形和浮点型)

猜你喜欢

转载自blog.csdn.net/zhangxm_qz/article/details/108505401