## 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 函數
- 無限極分類