php+闭包是什么,php什么时候使用闭包

php中的闭包的使用场景有:在动态调用静态类时,在callback函数中使用,赋值给一个普通的变量,使用use从父域中继承以及传递参数时

闭包函数

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

使用场景

动态调用静态类的时候

class test

{

public static function getinfo()

{

var_dump(func_get_args());

}

}

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

在callback函数中使用

//eg array_walk array_map preg_replace_callback etc

echo preg_replace_callback('~-([a-z])~', function ($match) {

return strtoupper($match[1]);

}, 'hello-world');

// 输出 helloWorld

?>

赋值给一个普通的变量

$greet = function($name)

{

printf("Hello %s\r\n", $name);

};

$greet('World');

$greet('PHP');

?>

使用use从父域中继承

$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();

传递参数

$example = function ($arg) use ($message) {

var_dump($arg . ' ' . $message);

};

$example("hello");

OO中的使用

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();

函数中的调用

function call($callback){

$callback();

}

call(function() {

var_dump('hell world');

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值