用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

php中闭包函数的用法实例

时间:2015-01-23  来源:西部数据  作者:西部数据

闭包函数是在PHP5.3版本才引入的了,闭包函数也就是匿名函数函数了,这个与js中的匿名函数很像了,下面我们来看看php匿名函数吧.

php闭包函数比如你现在就可以这样使用:

$closure = function($param) { echo $param; };

感觉和js是不是一样的用法了,一些闭包函数实例,代码如下:

  1. function test(){ 
  2. $test=''
  3. $test=function ($str){ 
  4. echo 'test'
  5. return $str
  6. }; 
  7. timeout('Y-m-d H:i:s',function ($time){ 
  8. //$this->date=time(); 
  9. return $time-24*60*60; 
  10. }); 
  11.  
  12. var_dump($test(‘hello word!’)); 
  13.  
  14. function timeout($format,$time){ 
  15. echo date($format,$time(time())); 
  16. test(); 

上例输出:2013-11-19 16:24:56teststring(11) “hello word!”

这样子参数便可以用函数了,条件是,php3.0以后php 4.0以后闭包函数支持$this用法,闭包函数通常被用在preg_match等有callback的函数,代码如下:

  1. <?php 
  2. class A { 
  3. private static $sfoo = 1; 
  4. private $ifoo = 2; 
  5. $cl1 = static function() { 
  6. return A::$sfoo
  7. }; 
  8. $cl2 = function() { 
  9. return $this->ifoo; 
  10. }; 
  11.  
  12. $bcl1 = Closure::bind($cl1, null, ‘A’); 
  13. $bcl2 = Closure::bind($cl2new A(), ‘A’); 
  14. echo $bcl1(), “n”; 
  15. echo $bcl2(), “n”; 
  16. ?> 
  17. //输出 

bind将类可以在闭包函数中使用,代码如下:

  1. <?php 
  2. class A1 { 
  3. function __construct($val) { 
  4. $this->val = $val; 
  5. function getClosure() { 
  6. //returns closure bound to this object and scope 
  7. return function() { return $this->val; }; 
  8. }//开源代码phpfensi.com 
  9.  
  10. $ob1 = new A1(1); 
  11. $ob2 = new A1(2); 
  12.  
  13. $cl = $ob1->getClosure(); 
  14. echo $cl(), “n”; 
  15. $cl = $cl->bindTo($ob2); 
  16. echo $cl(), “n”; 
  17. ?> 
  18. //以上例程的输出类似于: 

bindto在类里可以再次绑定类,代码如下:

  1. $fn = function(){ 
  2. return ++$this->foo; // increase the value 
  3. }; 
  4.  
  5. class Bar{ 
  6. private $foo = 1; // initial value 
  7.  
  8. $bar = new Bar(); 
  9.  
  10. $fn1 = $fn->bindTo($bar, ‘Bar’); // specify class name 
  11. $fn2 = $fn->bindTo($bar$bar); // or object 
  12. $fn3 = $fn2->bindTo($bar); // or object 
  13.  
  14. echo $fn1(); // 2 
  15. echo $fn2(); // 3 
  16. echo $fn3(); // 4 

在类之外需要绑定类才能用,绑定可以是类名,也可以是对象,绑定过之后可以再次绑定不需要提拱类名或对象.

来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
    无相关信息
栏目更新
栏目热门