closure,匿名函數,又稱為anonymous functions,是php5.3的時候引入的。匿名函數就是沒有定義名字的函數。這點牢牢記住就能理解匿名函數的定義了。
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類結構如下:
匿名函數 — 用于禁止實例化的匿名函數
匿名函數 — 復制一個閉包,綁定指定的$this對象和類作用域。
匿名函數 — 復制當前閉包對象,綁定指定的$this對象和類作用域。
看一個綁定$this對象和作用域的例子:
立即學習“PHP免費學習筆記(深入)”;
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
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END