1. 函数
1.函数基本
-
基本概念:function,是一种语法结构,将实现某一功能的代码块(多行代码)封装到一个结构中,从而实现代码的重复利用(复用)
-
函数使用:函数对应名+括号
注:如果函数命名过程中有参数,那么在调用过程中必须传入对应的参数,且:函数是一种结构,不能自动运行,必须通过调用。
- 函数调用特点:只要系统在内存中能找到对应的函数,就可以执行
- 函数一旦定义,可无限次调用
2.函数高级
1.作用域
-
局部作用域:某个函数内部作用域
局部变量:在函数内部定义的变量
局部变量只能在当前函数内部被访问
形参只能在局部作用域中使用 -
全局变量:在函数外部定义的变量
全局变量只能在全局作用域中访问,不能在函数内访问
全局变量可以当实参使用(全局变量传值给局部变量)
全局变量不能在局部作用域访问 -
超全局作用域:脚本中任意位置
超全局变量:系统定义的预定义变量,在所有域中都可访问
全局变量会被收纳在$GLOBALS中
可以利用超全局变量来保存数据,让数据不受作用域限制
超全局变量是系统定义,一般只用来访问数据
查看全局变量:var_dump($GLOBALS);
且$GLOBALS中还会包含以下超全局变量:
- $_GET :自动接收GET提交的数据
- $_POST :自动接受POST提交的数据
- $_COOKIE :自动接收cookie数据
- $_FILES :自动接收文件上传的数据
- $GLOBALS (自己包含自己)
2.跨作用域访问
跨作用域访问:在局部作用域访问全局变量,在全局作用域访问局部变量
方法:在函数内部使用global声明变量
作用:
- 在函数内部声明一个局部变量
- 在函数外部声明一个全局变量
- 两个变量指向一个内存
- global声明变量时不能赋值
注:如果当前声明的变量名在全局空间存在,系统直接引用
3.静态变量
定义:在函数内部定义的,可以在函数多次调用时共用的局部变量
方法:使用static修饰
数据只初始化一次,可在同一函数多次调用共享数据变化(普通变量无数据记录)
在函数执行时,如:static $count = 1
,此语句只会执行一次,在之后函数调用系统会跳过本行执行
4.强制类型
1.强类型参数
概念:在定义函数时给形参设定类型
强制类型的作用:
- 实参必须时传入形参规定的数据类型
- 保护函数内部运行逻辑正确
- 省去函数内部判定逻辑
- 提升解析效率
强制类型语法:function(类型 变量名)
2.强类型返回值
概念:指在函数定义时就规定好函数的返回值类型
强类型返回值作用:
- 强类型规定后,函数内部的返回值必须是指定类型
注:若想要强类型完全生效,则需要提前声明:declare(strict_types = 1)
,此声明需放最前面!!!
- 如果没有开启强类型检查,,虽然规定的返回值类型,但是系统不强制检查,会强制转换
5.可变参数
用于函数接收实参且不知道实参具体数量
用法:function ($a,$b,...$args)
可用于拆解数据
用法:function(...数组名)
- 形参中可以定义可变参数来吸收多余实参
- 利用可变参数将数据解析成多个参数
常用于不确定(数量)数据的计算
6.可变函数
可在将函数当作实参传入另一个函数并在另一个函数内进行使用
用法:回调函数
变量等于函数名
利用变量+()来匹配函数名当函数访问
7.匿名函数
1.简单匿名函数
语法:
变量 = function(){
函数体
return 返回值
};
注:本质是给变量赋值,所以需要语句结束符
调用匿名函数:变量名();
2.回调匿名函数
- 调用:
<?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);
- 使用系统函数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
- 闭包函数需用use来引用外部函数变量
- 闭包函数一旦引用外部函数的局部变量,那么外部函数执行完之后,被引用的局部变量也不会被释放
- 闭包函数可以被返回给外部函数调用出,然后在其他时候直接调用内部闭包函数