中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中閉包函數的實現方式有哪些

發布時間:2021-08-09 17:07:58 來源:億速云 閱讀:144 作者:Leah 欄目:編程語言

本篇文章為大家展示了PHP中閉包函數的實現方式有哪些,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

  PHP閉包函數的實現方式有哪些

  提到閉包就不得不想起匿名函數,也叫閉包函數(closures),貌似PHP閉包實現主要就是靠它。聲明一個匿名函數是這樣:

  $func=function(){

  };//帶結束符

  可以看到,匿名函數因為沒有名字,假如要使用它,需要將其返回給一個變量。匿名函數也像普通函數一樣可以聲明參數,調用方法也相同:

  $func=function($param){

  echo$param;

  };

  $func('somestring');

  //輸出:

  //somestring

  順便提一下,PHP在引入閉包之前,也有一個可以創建匿名函數的函數:createfunction,但是代碼邏輯只能寫成字符串,這樣看起來很晦澀并且不好維護,所以很少有人用。

  PHP閉包函數使用方法有哪些

  將匿名函數在普通函數中當做參數傳入,也可以被返回。這就實現了一個簡單的閉包。

  下邊有三個例子

  //例一

  //在函數里定義一個匿名函數,并且調用它

  functionprintStr(){

  $func=function($str){

  echo$str;

  };

  $func('somestring');

  }

  printStr();

  //例二

  //在函數中把匿名函數返回,并且調用它

  functiongetPrintStrFunc(){

  $func=function($str){

  echo$str;

  };

  return$func;

  }

  $printStrFunc=getPrintStrFunc();

  $printStrFunc('somestring');

  //例三

  //把匿名函數當做參數傳遞,并且調用它

  functioncallFunc($func){

  $func('somestring');

  }

  $printStrFunc=function($str){

  echo$str;

  };

  callFunc($printStrFunc);

  //也可以直接將匿名函數進行傳遞。假如你了解js,這種寫法可能會很熟悉

  callFunc(function($str){

  echo$str;

  });

  連接閉包和外界變量的關鍵字:USE

  閉包可以保存所在代碼塊上下文的一些變量和值。PHP在默認情況下,匿名函數不能調用所在代碼塊的上下文變量,而需要通過使用use關鍵字。

  換一個例子看看:

  functiongetMoney(){

  $rmb=1;

  $dollar=6;

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

  echo$rmb;

  echo$dollar;

  };

  $func();

  }

  getMoney();

  //輸出:

  //1

  //報錯,找不到dorllar變量

  可以看到,dollar沒有在use關鍵字中聲明,在這個匿名函數里也就不能獲取到它,所以開發中要注意這個問題。

  有人可能會想到,是否可以在匿名函數中改變上下文的變量,但我發現是不可以的:

  functiongetMoney(){

  $rmb=1;

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

  echo$rmb;

  //把$rmb的值加1

  $rmb++;

  };

  $func();

  echo$rmb;

  }

  getMoney();

  //輸出:

  //1

  //1

  啊,原來use所引用的也只不過是變量的一個副本而已。但是我想要完全引用變量,而不是復制。

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

  functiongetMoney(){

  $rmb=1;

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

  echo$rmb;

  //把$rmb的值加1

  $rmb++;

  };

  $func();

  echo$rmb;

  }

  getMoney();

  //輸出:

  //1

  //2

  好,這樣匿名函數就可以引用上下文的變量了。假如將匿名函數返回給外界,匿名函數會保存use所引用的變量,而外界則不能得到這些變量,這樣形成‘閉包’這個概念可能會更清晰一些。

  根據描述改變一下上面的例子:

  functiongetMoneyFunc(){

  $rmb=1;

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

  echo$rmb;

  //把$rmb的值加1

  $rmb++;

  };

  return$func;

  }

  $getMoney=getMoneyFunc();

  $getMoney();

  $getMoney();

  $getMoney();

  //輸出:

  //1

  //2

  //3

上述內容就是PHP中閉包函數的實現方式有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

朝阳县| 山阳县| 关岭| 上虞市| 安康市| 九龙县| 长子县| 永靖县| 盖州市| 双城市| 麦盖提县| 崇礼县| 金川县| 澳门| 长泰县| 邳州市| 彩票| 阿巴嘎旗| 东平县| 宣恩县| 旌德县| 丹凤县| 葫芦岛市| 瓦房店市| 稻城县| 岢岚县| 措勤县| 漳州市| 嘉鱼县| 福州市| 久治县| 乌拉特后旗| 迭部县| 会昌县| 明光市| 呈贡县| 德清县| 博罗县| 剑川县| 吉木乃县| 牟定县|