PHP Closure類的使用方法及介紹

Closure 類(PHP 5 >= 5.3.0)簡介 用于代表 匿名函數 的類. 匿名函數(在 PHP 5.3 中被引入)會産生這個類型的對象,下面我們來看一下PHP Closure類的使用方法及介紹。

PHP Closure類之前在PHP預定義接口中介紹過,但它可不是interface哦,它是一個內部的final類。Closure類是用來表示匿名函數的,所有的匿名函數都是Closure類的實例。


$func = function() {
echo 'func called';
};

var_dump($func); //class Closure#1 (0) { }

$reflect =new ReflectionClass('Closure');

var_dump(
$reflect->isInterface(), //false
$reflect->isFinal(), //true
$reflect->isInternal() //true
);

Closure類結構如下:
Closure::__construct — 用于禁止實例化的構造函數
Closure::bind — 複制一個閉包,綁定指定的$this對象和類作用域。
Closure::bindTo — 複制當前閉包對象,綁定指定的$this對象和類作用域。

看一個綁定$this對象和作用域的例子:

class Lang
{
private $name = 'php';
}

$closure = function () {
return $this->name;
};

$bind_closure = Closure::bind($closure, new Lang(), 'Lang');

echo $bind_closure(); //php

另外,PHP使用魔術方法__invoke()可以使類變成閉包:

class Invoker {
public function __invoke() {return __METHOD__;}
}
$obj = new Invoker;

echo $obj(); //Invoker::__invoke

更多相關文章
  • 在php中false true是真與假的意思,在php中叫做布爾型數據類型,他是我們常見的一種數據類型,如條件判斷也是布爾型數據類型,下面我們給大家介紹介紹.語法要指定一個布爾值,使用關鍵字 TRUE 或 FALSE.兩個都不區分大小寫. 代碼如下 <?php$foo = True; // 賦 ...
  • 一款以ecshop無限分類爲實例來介紹一下php中的遞歸函數返回值的問題介紹.在 ecshop 二次開發中做産品分類索引時,要根據分類 id 取得所屬頂級分類 id .第一個反應就是用遞歸遞出來,于是寫了遞歸函數如下
  • java中HttpServletRequest可獲取的URI方法介紹有需要了的請進入參考,其實只是幾個方法的介紹但作用還不小哦.HttpServletRequest 方法可獲取的URI, 以http://localhost:8080/project/path/test?param=val 爲例req
  • vpn搭配方法以前有介紹過在centos其它版本是搭配了,下文小編整理的一篇是Centos6上搭建vpn的方法,希望對各位會帶來幫助.以前是Centos5,按照網上的一鍵安裝包可以安裝PPTP VPN,但是換成Centos6.2後,死活不行,說文件不存在.下面是Centos6.5一鍵搭建PPTP V
  • 有時我們在做一些下載或應用時有一些文件類型是iis不支持,這樣我們就必須增加才可以了,下面我來介紹在windows 2008中增加MIME類型的方法,有需要了解的朋友可進入參考.您從 IIS 7.0 Web 伺服器中
  • C#中listview的使用方法介紹
    在.Net FrameWork SDK中定義了許多組件,Visual C#就是通過獲得這些
  • 有時我們爲了網站安全考慮,我們不允許直接跨域提交form表單數據,如果我們自己有這個需求呢?下面我們來介紹兩種跨域的方法解決直接跨域問題.下面我們來看看兩種php跨域提交form的方法一,通過php curl fun
  • 本文章來介紹關于ThinkPHP防範XSS跨站攻擊的一種方法介紹,XSS這個漏洞往往存在于客戶端腳本,如果一個Javascript腳本訪問需要參數的URL,且需要將該信息用于寫入自己的頁面,且信息未被編碼,那麽就有可
一周排行