閉包函數
閉包的概念
閉包就是能夠讀取其他函數內部變量的函數。例如在javascript中,只有函數內部的子函數才能讀取局部變量,所以閉包可以理解成“定義在一個函數內部的函數“。在本質上,閉包是將函數內部和函數外部連接起來的橋梁。 在php中,閉包函數一般就是匿名函數. 舉例,有一個定時任務,每一秒執行一次,現在我們要開啟一個服務,然后準備在30秒的時候關閉這個服務
<?php
function tick($callback){
while (1) {//簡單實現的定時器,每秒都去執行一次回調
call_user_func($callback);
sleep(1);
}
}
class Server
{
//模擬退出一個服務
public function exitServer()
{
return true;
}
}
$server = new Server();
$time = time();
tick(function ()use($server) {
$server->exitServer();
});
在這里面,使用匿名函數,use了函數外部的$server變量,才使得定時器能回調調用$server->exitServer();
匿名函數
匿名函數 通俗來講,就是沒有名字的函數,例如上面寫的function(){},它通常作為閉包函數使用,使用方法如下:
<?php
$fun = function($name){
printf("Hello %s\r\n",$name);
};
echo $fun('Tioncico');
function a($callback){
return $callback();
}
a(function (){
echo "EasySwoole\n";
return 1;
});
use
PHP在默認情況下,匿名函數不能調用所在代碼塊的上下文變量,而需要通過使用use關鍵字。
<?php
function a($callback){
return $callback();
}
$str1 = "hello,";
$str2 = "Tioncico,";
a(function ()use($str1,$str2){
echo $str1,$str2,"EasySwoole\n";
return 1;
});