php学习之旅第五天

1. 函数

1.函数基本
  1. 基本概念:function,是一种语法结构,将实现某一功能的代码块(多行代码)封装到一个结构中,从而实现代码的重复利用(复用)

  2. 函数使用:函数对应名+括号

注:如果函数命名过程中有参数,那么在调用过程中必须传入对应的参数,且:函数是一种结构,不能自动运行,必须通过调用。
  1. 函数调用特点:只要系统在内存中能找到对应的函数,就可以执行
  2. 函数一旦定义,可无限次调用
2.函数高级
1.作用域
  1. 局部作用域:某个函数内部作用域
    局部变量:在函数内部定义的变量
    局部变量只能在当前函数内部被访问
    形参只能在局部作用域中使用

  2. 全局变量:在函数外部定义的变量
    全局变量只能在全局作用域中访问,不能在函数内访问
    全局变量可以当实参使用(全局变量传值给局部变量)
    全局变量不能在局部作用域访问

  3. 超全局作用域:脚本中任意位置
    超全局变量:系统定义的预定义变量,在所有域中都可访问

全局变量会被收纳在$GLOBALS中

可以利用超全局变量来保存数据,让数据不受作用域限制
超全局变量是系统定义,一般只用来访问数据
查看全局变量:var_dump($GLOBALS);

且$GLOBALS中还会包含以下超全局变量:

  1. $_GET :自动接收GET提交的数据
  2. $_POST :自动接受POST提交的数据
  3. $_COOKIE :自动接收cookie数据
  4. $_FILES :自动接收文件上传的数据
  5. $GLOBALS (自己包含自己)
2.跨作用域访问

跨作用域访问:在局部作用域访问全局变量,在全局作用域访问局部变量
方法:在函数内部使用global声明变量
作用:

  1. 在函数内部声明一个局部变量
  2. 在函数外部声明一个全局变量
  3. 两个变量指向一个内存
  4. global声明变量时不能赋值
    注:如果当前声明的变量名在全局空间存在,系统直接引用
3.静态变量

定义:在函数内部定义的,可以在函数多次调用时共用的局部变量
方法:使用static修饰
数据只初始化一次,可在同一函数多次调用共享数据变化(普通变量无数据记录)
在函数执行时,如:static $count = 1,此语句只会执行一次,在之后函数调用系统会跳过本行执行

4.强制类型
1.强类型参数

概念:在定义函数时给形参设定类型
强制类型的作用:

  1. 实参必须时传入形参规定的数据类型
  2. 保护函数内部运行逻辑正确
  3. 省去函数内部判定逻辑
  4. 提升解析效率
    强制类型语法:function(类型 变量名)
2.强类型返回值

概念:指在函数定义时就规定好函数的返回值类型
强类型返回值作用:

  1. 强类型规定后,函数内部的返回值必须是指定类型
注:若想要强类型完全生效,则需要提前声明:declare(strict_types = 1),此声明需放最前面!!!
  1. 如果没有开启强类型检查,,虽然规定的返回值类型,但是系统不强制检查,会强制转换
5.可变参数

用于函数接收实参且不知道实参具体数量
用法:function ($a,$b,...$args)
可用于拆解数据
用法:function(...数组名)

  1. 形参中可以定义可变参数来吸收多余实参
  2. 利用可变参数将数据解析成多个参数

常用于不确定(数量)数据的计算

6.可变函数

可在将函数当作实参传入另一个函数并在另一个函数内进行使用

用法:回调函数
变量等于函数名
利用变量+()来匹配函数名当函数访问
在这里插入图片描述

7.匿名函数
1.简单匿名函数

语法:

变量 = function(){
函数体
return 返回值
};

注:本质是给变量赋值,所以需要语句结束符

调用匿名函数:变量名();

2.回调匿名函数
  1. 调用:
<?php

#求数组内数字的立方
$arr = [1,2,3];

function my_cube($arr,$cube){
	$list = [];
	foreach ($arr as $value){
		$list[] = $cube($value);
	}
	return $list;
}

$cube = function($num){
	return $num ** 3;
};

//$res = my_cube($arr,$cube);

$res = my_cube($arr,function($num){return $num ** 3;});
print_r($res);
  1. 使用系统函数array_map
$res = array_map(function($n){return $n ** 3;},$arr);

回调匿名函数好处:用后即焚,释放内存

3.匿名函数闭包

闭包:在函数内部的函数

function outer1($str){
	echo $str;
	$inner = function() use($str){
	echo 'inner'.$str;
	};
	$inner();
}
outer1('hello');

在外部调用闭包函数:

function outer2($str){
	$inner = function($s) use($str){
		echo $str  .  $s;
	};
	return $inner;
}

$res = outer2('hello');
$res('world');

输出结果为helloworld

  1. 闭包函数需用use来引用外部函数变量
  2. 闭包函数一旦引用外部函数的局部变量,那么外部函数执行完之后,被引用的局部变量也不会被释放
  3. 闭包函数可以被返回给外部函数调用出,然后在其他时候直接调用内部闭包函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值