1. 函数
函数是完成特定功能的代码段
函数分为内置函数和自定义函数
1.1. 函数的构成
1.1.1. 函数名
函数名必须遵守标识符的命名规则
函数名不区分大小写
不支持函数重载,即不允许定义同名的函数,即使参数或返回值不同
1.1.2. 参数
参数可以有 0 个、1 个或多个
参数用 , 分隔
参数可以是任意类型
参数可以通过值传递或通过引用传递,引用传递的参数之前需要添加 &
参数分为必选参数和可选参数,必选参数在可选参数之前,可选参数需要提供默认值
可以在参数之前添加 类型,进行参数的类型声明
可变数量的参数之前需要添加 …,可变数量的参数是参数组成的索引数组
1.1.3. 返回值
返回值可以是任意类型
return 语句是可选的,如果省略 return 语句,则返回值为 null
return 语句会立即中止函数的运行
可以在参数列表之后添加 :类型,进行返回值的类型声明
1.1.4. 变量
变量分为全局变量和局部变量,全局变量在函数外部定义,作用域在函数外部,局部变量在函数内部定义,作用域在函数内部
局部变量分为静态变量和动态变量,静态变量使用 static 进行定义,只初始化一次,在函数执行完毕后不立即释放,动态变量在函数执行完毕后立即释放
通过使用 global 或 $GLOBALS,可以在函数内部访问全局变量
1.2. 函数的定义
function 函数名(参数列表)
{
return 返回值;
}
1.3. 函数的调用
函数名(参数列表);
- 函数的调用可以在函数的定义之前或之后
2. 递归函数
2.1. 概念
递归函数是在函数内部调用自身的函数
尽量避免使用递归函数
2.2. 语法
function 函数名(参数列表)
{
函数名(参数列表);
}
3. 可变函数
3.1. 概念
可变函数是通过存储函数名或方法名的变量来调用函数或方法
可变函数可以用于函数或方法,不能用于语言结构
3.2. 语法
$变量名 = ‘函数名’;
$变量名(参数列表);
$变量名 = ‘类名::静态方法名’;
$变量名 = [‘类名’, ‘静态方法名’];
$变量名 = [$对象名, ‘静态方法名’];
$变量名 = [$对象名, ‘方法名’];
$变量名(参数列表);
4. 匿名函数
4.1. 概念
匿名函数也叫闭包函数,是一种没有指定名称的函数
匿名函数经常用作回调函数类型的参数
4.2. 语法
function(参数列表) use (外部变量列表)
{
}
- 匿名函数通过 use 使用父作用域中的变量
- 外部变量不能是 $this、超全局变量、和参数同名的变量
- 外部变量可以通过值传递或通过引用传递,引用传递的外部变量之前需要添加 &
- 对象类型的外部变量之前不需要添加 &,因为对象类型的变量默认通过引用传递
- 在类的方法中使用的匿名函数,可以直接使用 $this
5. 函数处理函数
5.1. 检查函数是否存在
function_exists(函数名)
5.2. 获取函数的参数的数量
func_num_args()
5.3. 获取函数的参数列表
func_get_args()
- 返回值是参数组成的索引数组
5.4. 获取函数的参数
func_get_arg(参数索引)
- 参数索引从 0 开始
5.5. 调用函数
call_user_func(函数名[, 参数1, 参数2, …])
5.6. 调用函数
call_user_func_array(函数名, 参数列表)
- 参数列表是参数组成的索引数组