PHP匿名函數和閉包 匿名函數[官方文檔][2] 本篇文章的代碼測試使用的是[php線上測試工具][1]5.6 匿名函數 匿名函數就是沒有定義函數名的函數,php從5.3版本開始支持匿名函數 php ...
PHP匿名函數和閉包
匿名函數官方文檔
本篇文章的代碼測試使用的是php線上測試工具5.6
匿名函數
匿名函數就是沒有定義函數名的函數,php從5.3版本開始支持匿名函數
<?php
//普通函數
function test($foo){
echo $foo;
};
//調用
test('hello world');
//匿名函數
$test = function($foo){
echo $foo;
}; //定義時要加結束符
//調用
$test('hello world');
匿名函數的作用是方便寫回調函數和閉包。
下麵說說我個人簡單理解的回調函數和閉包:
- 回調函數
回調函數是一個被被調用者調用的函數,也就是一個函數通過傳參被另一個函數調用時,就是回調函數。
<?php
//這個函數就是回調函數
function your_function(){
echo 'hello world';
}
function test($func){
if(is_callable($func)){
$func();
}else{
return false;
}
}
- 閉包
閉包的特點體現在作用域,閉包函數可以使用父級作用域的變數,並延長父級作用域變數的生命周期,php的閉包需要使用匿名函數來實現,使用了父級局部變數的的回調函數也是閉包函數。
<?php
$foo = [1,2,3,4,5];
//普通寫法
function your_function($value){
return $value += 1;
}
print_r(array_map('your_function',$foo));
//匿名函數閉包寫法
print_r(array_map(function($value){
return $value += 1;
},$foo));
與js不同,PHP函數內部不可以直接讀取外部全局變數(需要用global)和父級局部變數(需要用use)
<?php
$foo = [1,2,3,4,5];
$a = 1;
function test($arr){
$b = 2;
print_r(array_map(function($value)use($b){
global $a;
return $value + $a + $b;
},$foo));
}
test($foo);
這是我寫的第一篇博客,希望自己能有個好的開始。內容如果有錯誤,還望大家不吝指正。謝謝!