php闭包 cnblog,php闭包函数(二)

摘要:在PHP中,可以理解闭包是由匿名函数构成的一种“结构”。就像string,int等,可以把闭包函数作为变量的值来使用。PHP会自动把此种表达式转换成内置类 Closure 的对象实例。在上文中我有说道...

在PHP中,可以理解闭包是由匿名函数构成的一种“结构”。

就像string,int等,可以把闭包函数作为变量的值来使用。PHP会自动把此种表达式转换成内置类 Closure 的对象实例。

1.在上文中我有说道匿名函数(闭包函数)调用方式是 变量名() 其实就是调用了Closure类中的__invoke()方法,证明一下:$var = function ($name) {

return 'Hello ' . $name . '
';

};

echo $var->__invoke("yzmcms");

echo $var("yzmcms");

// 运行结果:

// Hello yzmcms

// Hello yzmcms

2.php闭包使用例子:class test{

private $_factory;

public function set($id, $value){

$this->_factory[$id] = $value;

}

public function get($id){

$value = $this->_factory[$id];

return $value();//如果不加括号,仅仅返回的是闭包类的一个对象,并不是user实例

}

}

class user{

private $_username;

function __construct($username = '') {

echo '我被实例化了
';

$this->_username = $username;

}

function get_username(){

return $this->_username;

}

}

$test = new test();

$test->set('zhangsan', function(){

return new user('张三');

});

$test->set('lisi', function(){

return new user('李四');

});

echo $test->get('zhangsan')->get_username();

echo '
';

echo $test->get('lisi')->get_username();

// 运行结果:

// 我被实例化了

// 张三

// 我被实例化了

// 李四

代码test类中有一个工厂($_factory)用来保存对象实例,然后通过set()方法注册服务,通过get()方法获取服务。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值