PHP博客的研究方法,PHP闭包Closure研究

一、闭包概念

接触过JavaScript朋友可能对闭包有所熟悉,因为JS中我们会经常用到闭包函数,非常方便,呐,PHP5.3也开始引入了闭包的特性。要了解闭包,我们先要知道何为匿名函数,也叫闭包函数(closures),PHP的闭包实现主要是由其完成的。

先看一个函数:

$func = function(){

};  // 注意:这里带结束符

可以看到,匿名函数没有名字,如果要使用它,需要将其返回给一个变量,匿名函数像其他普通函数一样,也可以传递参数。

// 带参数的匿名函数

$func = function( $param ) {

echo $param;

};

$func( 'some string' );

二、闭包的应用

header("Content-Type:text/html;charset=utf-8");

class Di{

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;

}

}

// 从这里开始看

$di = new Di();

$di->set("zhangsan",function(){

return new User('张三');

});

$di->set("lisi",function(){

return new User("李四");

});

echo $di->get("zhangsan")->getUserName();

echo $di->get("lisi")->getUserName();

代码中有一个Di容器用来保存对象实例,然后通过set()方法注册服务,通过get()方法获取服务。

我们看到$di->set()的时候,使用了匿名函数,我们预先注册了zhangsan和lisi两个服务,这两个服务都是User类的实例,在$di->set的时候实际上并没有实例化,而是在$di->get()的时候才执行了匿名函数并将对象返回,这就实现了按需实例化,不用则不实例化,提高效率。

三、闭包特性

经常写js的同学应该知道js的闭包特性,简单的说就是在一个函数里可以定义子函数,父函数中的变量在子函数中可以直接使用,那么PHP的闭包怎么用呢?有一点区别。当你想将外层变量传进内层匿名函数时,使用use (变量)的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值