码迷,mamicode.com
首页 > Web开发 > 详细

PHP闭包的使用

时间:2015-06-04 22:44:02      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

一、介绍

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

 

二、使用场景

1、动态调用静态类的时候

<?php
class test
{
    public static function getinfo() 
    {
        var_dump(func_get_args());
    }
}

call_user_func(array(‘test‘, ‘getinfo‘), ‘hello world‘);

 

2、在callback函数中使用

<?php
//eg array_walk array_map preg_replace_callback etc

echo preg_replace_callback(‘~-([a-z])~‘, function ($match) {
    return strtoupper($match[1]);
}, ‘hello-world‘);
// 输出 helloWorld
?>

 

3、赋值给一个普通的变量

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet(‘World‘);
$greet(‘PHP‘);
?>

 4、使用use从父域中继承

<?php
$message = ‘hello‘;

// 继承 $message
$example = function () use ($message) {
    var_dump($message);
};
echo $example();


// Inherit by-reference
$example = function () use (&$message) {
    var_dump($message);
};
echo $example();

// The changed value in the parent scope
// is reflected inside the function call
$message = ‘world‘;
echo $example();

 5、传递参数

<?php
$example = function ($arg) use ($message) {
    var_dump($arg . ‘ ‘ . $message);
};
$example("hello");

 6、OO中的使用

<?php

class factory{
	private $_factory;
	public function set($id,$value){
		$this->_factory[$id] = $value;
	}
	
	public function get($id){
		$value = $this->_factory[$id];
		return $value();
	}
}
class User{
	private $_username;
	function __construct($username="") {
		$this->_username = $username;
	}
	function getUserName(){
		return $this->_username;
	}
}

$factory = new factory();

$factory->set("zhangsan",function(){
	return new User(‘张三‘);
});
$factory->set("lisi",function(){
   return new User("李四"); 
});
echo $factory->get("zhangsan")->getUserName();
echo $factory->get("lisi")->getUserName();

 

7、函数中的调用

<?php

function call($callback){
			$callback();
	}
call(function() {
	var_dump(‘hell world‘);
});

 

参考:http://php.net/manual/zh/function.call-user-func-array.php

PHP闭包的使用

标签:

原文地址:http://www.cnblogs.com/chenpingzhao/p/4553139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!