閉包和匿名函式

2021-08-27 08:11:36 字數 1843 閱讀 8228

閉包是指在建立時封裝周圍狀態的函式.即便閉包所在的環境不存在了,閉包中封裝的狀態依然存在.

匿名函式其實就是沒有名字的函式

從理論上講閉包和匿名函式是不同的概念.但是php將其視作為相同的概念

注意:閉包和匿名函式其實是偽裝成函式的物件.如果審查php閉包或匿名函式,會發現它們是closure類的例項

上面的案例中之所以能呼叫$closure變數,是因為閉包物件實現了__invoke()

魔術方法當嘗試以呼叫函式的方式呼叫乙個物件時,__invoke()方法會被自動呼叫。

連線閉包和外界變數的關鍵字:use

有些方法你是不能改動函式的引數數量的.比如swoole,但是你又想從外面帶引數給匿名函式中使用,這個時候我們就可以用use

閉包可以儲存所在**塊上下文的一些變數和值。php在預設情況下,匿名函式不能呼叫所在**塊的上下文變數,而需要通過使用use關鍵字。

換乙個例子看看:

function getmoney() {

$rmb = 1;

$dollar = 6;

$func = function() use ( $rmb ) {

echo $rmb;

echo $dollar;

$func();

getmoney();

//輸出:

//1//報錯,找不到dorllar變數

可以看到,dollar沒有在use關鍵字中宣告,在這個匿名函式裡也就不能獲取到它

是否可以在匿名函式中改變上下文的變數,是不可以的:

function getmoney() {

$rmb = 1;

$func = function() use ( $rmb ) {

echo $rmb;

//把$rmb的值加1

$rmb++;

$func();

echo $rmb;

getmoney();

//輸出:

//1//1

use所引用的也只不過是變數的乙個副本而已。但是我想要完全引用變數,而不是複製。

要達到這種效果,其實在變數前加乙個 & 符號就可以了

匿名函式

$server->on('request', function ($req, $resp) {

echo "hello world";

類靜態方法

class a{

static function test($req, $resp) {

echo "hello world";

$server->on('request', 'a::test');

$server->on('request', array('a', 'test'));

函式

function my_onrequest($req, $resp){

echo "hello world";

$server->on('request', 'my_onrequest');

物件方法

class a{

function test($req, $resp) {

echo "hello world";

$object = new a();

$server->on('request', array($object, 'test'));

modern  ph

匿名函式和閉包

匿名函式 匿名函式和普通函式 function box alert box 閉包概念 閉包是指有權訪問另乙個函式作用域中的變數的函式,建立閉包的常見的方式,就是在乙個函式內部建立另乙個函式,通過另乙個函式訪問這個函式的區域性變數。閉包作用 使用閉包有乙個優點,也是其缺點。可以把區域性變數駐留在記憶體...

閉包和匿名函式

匿名函式 沒有函式名稱的函式 這就是匿名函式 function argument1,argument2 閉包 乙個可以使用另外乙個函式作用域中的變數的函式。如下面的 函式b就是閉包,但是這個前提是 當函式a的內部函式b被函式a外的乙個變數引用的時候,就建立了乙個我們通常所謂的 閉包 意思是說b要變成...

匿名函式和閉包

匿名函式 function 匿名函式不能呼叫,要呼叫可以通過下述方法 1 把匿名函式賦值給變數 var box function alert box lee 2 通過自我執行來執行匿名函式 匿名函式 var box function alert box lee alert function age ...