久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP基于Closure類(lèi)創(chuàng)建匿名函數(shù)的方法詳解

這篇文章主要介紹了PHP基于Closure類(lèi)創(chuàng)建匿名函數(shù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了Closure 類(lèi)的功能、常用函數(shù)使用技巧及相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了PHP基于Closure類(lèi)創(chuàng)建匿名函數(shù)的方法。分享給大家供大家參考,具體如下:

Closure 類(lèi)

用于代表匿名函數(shù)的類(lèi)。

匿名函數(shù)(在 PHP 5.3 中被引入)會(huì)產(chǎn)生這個(gè)類(lèi)型的對(duì)象。在過(guò)去,這個(gè)類(lèi)被認(rèn)為是一個(gè)實(shí)現(xiàn)細(xì)節(jié),但現(xiàn)在可以依賴(lài)它做一些事情。自 PHP 5.4 起,這個(gè)類(lèi)帶有一些方法,允許在匿名函數(shù)創(chuàng)建后對(duì)其進(jìn)行更多的控制。

這個(gè)類(lèi)不能實(shí)例化,里面主要有兩個(gè)方法,都用來(lái)復(fù)制閉包,一個(gè)靜態(tài)一個(gè)動(dòng)態(tài),下面分別詳細(xì)講解下這兩個(gè)不好理解的方法。

Closure::bind

public static Closure Closure::bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] )

參數(shù)說(shuō)明:

closure
需要綁定的匿名函數(shù)。

newthis
需要綁定到匿名函數(shù)的對(duì)象,或者 NULL 創(chuàng)建未綁定的閉包。

newscope
想要綁定給閉包的類(lèi)作用域,或者 'static' 表示不改變。如果傳入一個(gè)對(duì)象,則使用這個(gè)對(duì)象的類(lèi)型名。 類(lèi)作用域用來(lái)決定在閉包中 $this 對(duì)象的 私有、保護(hù)方法 的可見(jiàn)性。

The class scope to which associate the closure is to be associated, or 'static' to keep the current one. If an object is given, the type of the object will be used instead. This determines the visibility of protected and private methods of the bound object.

上面是該方法的定義,第一個(gè)參數(shù)很好理解,就是一個(gè)閉包函數(shù);第二個(gè)參數(shù)就不太好理解,如果要復(fù)制的閉包中包含$this,這個(gè)對(duì)象就表示這個(gè)$this,閉包函數(shù)里面對(duì)這個(gè)對(duì)象的修改在調(diào)用結(jié)束之后也會(huì)保持一致,比如修改了一個(gè)屬性;第三個(gè)參數(shù)就不太好理解了,看官方的說(shuō)明也是云里霧里的,默認(rèn)參數(shù)情況下,調(diào)用$this->訪(fǎng)問(wèn)object $newthis中的屬性函數(shù)的時(shí)候,會(huì)有限制,只能訪(fǎng)問(wèn)public屬性的函數(shù),如果想訪(fǎng)問(wèn)protected/private屬性,就要設(shè)置為對(duì)應(yīng)的類(lèi)名/類(lèi)實(shí)例,就要像在類(lèi)里面一樣,要訪(fǎng)問(wèn)那個(gè)類(lèi)的保護(hù)/私有屬性函數(shù)。

例子

<?php
class T {
  private function show()
  {
    echo "我是T里面的私有函數(shù):show\n";
  }
  protected function who()
  {
    echo "我是T里面的保護(hù)函數(shù):who\n";
  }
  public function name()
  {
    echo "我是T里面的公共函數(shù):name\n";
  }
}
$test = new T();
$func = Closure::bind(function(){
  $this->who();
  $this->name();
  $this->show();
}, $test);
$func();

上面的代碼會(huì)報(bào)錯(cuò)Fatal error: Uncaught Error: Call to protected method T::who() from context 'Closure'。

加上bind第三個(gè)參數(shù)為t::class或者new T(),會(huì)正常輸出每一個(gè)結(jié)果。

我是T里面的保護(hù)函數(shù):who
我是T里面的公共函數(shù):name
我是T里面的私有函數(shù):show

當(dāng)然了,閉包也可以傳遞參數(shù)

$test = new StdClass();
var_dump($test);
$func = Closure::bind(function($obj){
  $obj->name = "燕睿濤";
}, null);
$func($test);
var_dump($test);

上面的程序跟匿名函數(shù)一樣,啥對(duì)象也沒(méi)有依賴(lài),上面的程序會(huì)輸出:

object(stdClass)#1 (0) {
}
object(stdClass)#1 (1) {
 ["name"]=>
 string(9) "燕睿濤"
}

另外還有個(gè)特別要說(shuō)明的例子

<?php
class T {
  private function show()
  {
    echo "我是T里面的私有函數(shù):show\n";
  }
  protected function who()
  {
    echo "我是T里面的保護(hù)函數(shù):who\n";
  }
  public function name()
  {
    echo "我是T里面的公共函數(shù):name\n";
  }
}
$func = Closure::bind(function ($obj) {
  $obj->show();
}, null);
$test = new T();
$func($test);

上面的情況會(huì)輸出什么呢,沒(méi)錯(cuò),會(huì)報(bào)錯(cuò),提示訪(fǎng)問(wèn)不了私有屬性show,這個(gè)時(shí)候,加上第三個(gè)參數(shù)就可以了,看了第三個(gè)參數(shù)不光影響$this的作用域,也可以影響參數(shù)的作用域。

Closure::bindTo

bindTo和bind功能類(lèi)似,這里只是另外一種形式,都是復(fù)制當(dāng)前閉包對(duì)象,綁定指定的$this對(duì)象和類(lèi)作用域。,參數(shù)比bind少了第一個(gè),后面兩個(gè)一樣,當(dāng)然還有一個(gè)區(qū)別就是bindTo不是靜態(tài)方法,是閉包才會(huì)存在的一個(gè)屬性方法。

例子

<?php
class T {
  private function show()
  {
    echo "我是T里面的私有函數(shù):show\n";
  }
  protected function who()
  {
    echo "我是T里面的保護(hù)函數(shù):who\n";
  }
  public function name()
  {
    echo "我是T里面的公共函數(shù):name\n";
  }
}
$func = function () {
  $this->show();
  $this->who();
  $this->name();
};
$funcNew = $func->bindTo(new T(), T::class);
$funcNew();

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡(jiǎn)單分析了插值查找算法的概念、原理并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)針對(duì)有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實(shí)現(xiàn)服務(wù)端分頁(yè)的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組排序算法,結(jié)合實(shí)例形式對(duì)比分析了php針對(duì)多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實(shí)現(xiàn)無(wú)刷新文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開(kāi)發(fā)接口使用RSA進(jìn)行加密解密方法,對(duì)此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 国产精品亚洲第一区在线暖暖韩国 | 国产日韩精品在线 | 一级黄色在线 | 亚洲视频精品在线 | 亚洲精品中文字幕在线观看 | 在线观看国产wwwa级羞羞视频 | 欧美亚洲一区二区三区 | 国外成人在线视频 | 欧美黄在线观看 | 五月婷婷视频 | 久久99精品久久久久蜜桃tv | 国产一级久久久久 | 一区欧美| 国产欧美性成人精品午夜 | 一本色道久久综合亚洲精品高清 | 激情五月综合网 | 99精品视频免费在线观看 | 91社影院在线观看 | 91正在播放 | 国产小视频在线 | 水蜜桃亚洲一二三四在线 | 日韩字幕 | 中文字幕免费视频 | 黄视频免费在线 | 91av国产在线视频 | 精品欧美激情在线观看 | 亚洲精品自在在线观看 | 精品乱码一区二区三四区 | 欧美日韩在线一区二区 | 亚洲欧美一区二区三区在线 | 亚洲精品久久久久久久久久久 | 日韩1区 | 伊人电影院av | 碰碰视频 | 青青草国产在线观看 | 成人性生交大片免费看r链接 | 精品伊人久久 | 亚洲综合一区二区三区 | 国产成年人视频 | 国产高清视频在线观看播放 | 久久精品亚洲精品 |