## PHP 可变函数
在PHP中如果将"函数名称"赋予字符串类型的变量,但是在使用该变量时,如果带有小括号,那么PHP引擎将解析函数
```
$func_name = 'md5';
echo $func_name('curder') , '<br />'; // 5039dc9c870e0e9fe780ed7b5a339597
echo md5('curder') , '<br />'; // 5039dc9c870e0e9fe780ed7b5a339597
```
> get_defined_functions() 得到所有已定义的函数,返回 array ,
> 可变函数不能用于类似 `echo()` `print()` `unset()` `isset()` `empty()` `include()` `require()` 以及类似的语言结构。
## PHP 回调函数
回调函数就是调用函数的时候将另外一个函数的名称当作参数传递进去,并且在函数体中金雄调用
### 如果调用回调函数?
* 可以通过可变函数的形式在函数体中进行调用
* 可以通过 `call_user_func()` 和 `call_user_func_array()` 进行调用
```
function study()
{
echo 'studying...';
}
function play()
{
echo 'playing...';
}
function sing()
{
echo 'singing...';
}
function doWhat($func_name)
{
echo 'I am ';
$func_name();
}
doWhat('study'); // I am studying...
doWhat('sing'); // I am singing...
```
### 系统函数 `array_map()` 的应用
```
$arr = [2, 3, 4, 5, 6];
// 将数组 $arr 中所有的单元值 * 3
function myFunc($value)
{ // 定义自定义的回调函数
return $value * 3;
}
$res = array_map('myFunc', $arr);
print_r($res);
```
### 系统 `array_filter()` 函数使用
```
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
// 获取数组 $arr 中所有奇数
function odd($value)
{
if ($value % 2 == 1) return $value;
}
$arr = array_filter($arr, 'odd');
print_r($arr); // Array ( [0] => 1 [2] => 3 [4] => 5 [6] => 7 [8] => 9 )
```
### 系统函数 `call_user_func()` 和 `call_user_func_array()` 的简单使用
```
<?php
function play($name, $age)
{
return 'My name is ' . $name . ', I am ' . $age;
}
echo call_user_func('play', 'Curder', '25'); // My name is Curder, I am 25
echo call_user_func_array('play', ['Curder', '25']); // My name is Curder, I am 25
```
## PHP 匿名函数(Closure)
匿名函数也叫闭包函数,允许临时创建一个没有指定名称的函数,最经常用作回调函数参数的值。
**匿名函数也可以作为变量的值来使用**
```
$func_name = function ($string) {
return 'this is a test code' . $string;
};
echo $func_name('!!!'); // this is a test code
```
### 通过 `create_function()` 创建匿名函数
```
$func_name = create_function('$x,$y','return $x+$y;');
echo $func_name(2,6); // 8
```
### 使用 `array_map()` 时传递回调函数
```
$arr = [3, 45, 7, 8, 9];
$res = array_map(function($value){return $value*3;},$arr);
// Array ( [0] => 9 [1] => 135 [2] => 21 [3] => 24 [4] => 27 )
```
### 使用 `call_user_func()` 传递回调函数
```
call_user_func(function ($username) {
echo "hi {$username}";
}, 'Curder'); // hi Curder
```
- 开始
- PHP配置参数的介绍
- PHP代码优化
- php中的命名空间
- PHP文件上传类
- PHP文件下载
- PHP验证码
- ThinkPHP3.2 框架函数
- A函数:实例化控制器
- C函数:设置和获取配置参数
- D函数:实例化模型
- F 函数:快速缓存设置和存取
- M函数:例化模型(无需定义模型类)
- L函数:设置和获取语言变量
- S 函数:缓存设置和存取
- R函数:直接调用控制器的操作方法
- U函数:URL地址生成
- I 函数:安全获取系统输入变量
- 日志
- ThinkPHP在关闭调试模式导致函数被缓存
- MySQL触发器使用时遇到的坑
- PHP常用函数
- 五一回家记录
- window的PHP开发(wamp)下安装redis扩展
- Windows下安装使用Redis
- PHP7新特性
- 利用 phpmailer 类实现队列发送邮件
- GD 库图像处理
- 检测 PHP 模块是否开启
- GD 库操作一般步骤
- GD 库绘画改变字体
- GD 绘制验证码
- GD 缩略图实现
- GD 绘制水印
- 日期时间函数库
- PHP 函数
- 无限极分类