Learn And Life.

Focus on php and open source.


  • Home

  • Archives

  • Tags
Learn And Life.

PHP闭包

Posted on 2016-11-20

先看看什么是闭包,闭包也就是所谓的匿名函数,只是函数的一种隐式定义,从结构化的角度可以理解为,有且只有一次调用。匿名函数并不是一个函数,而是Closure类的一个对象,Closure类是一个final类,不可以继承,同时也不可以被实例化,那么如何通过声明一个匿名函数就实现了Closure类的实例化了呢?
以下是php的源码中的部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED)
{
...
if (UNEXPECTED((op_array->common.fn_flags & ZEND_ACC_STATIC) ||
(EX(prev_execute_data) &&
EX(prev_execute_data)->function_state.function->common.fn_flags & ZEND_ACC_STATIC))) {
zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(called_scope), NULL TSRMLS_CC);
} else {
zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC);
}
...
}

还是看看闭包怎么用吧!先声明,后调用。先看闭包的几种使用场景。
场景一: 简单函数,分为使用use和不使用use

1
2
3
4
$outer = "welcome.....";
$colsure = function($inner,$outer) use ($outer){
......
}

由此可见,加use和不加use的区别,就是use能处理外部输入的参数,而function后面的括号,能处理内部参数(实现递归)和接受外部输入的参数

场景二: 实现回调

1
2
3
4
5
6
7
8
9
10
11
12
function extractParam($func='')
{
if(empty($func)){
return;
}
return $func();
}
extractParam(function($param){
return $param;
});

场景三: 实现类的注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Binder
{
protected $_binders = [];
public function getClosure($abstract, $concrete)
{
return function ($container, $parameters = []) use ($abstract, $concrete){
$method = ($abstract == $concrete) ? 'build' : 'make';
return $container->$method($concrete, $parameters);
};
}
public function build($abstract,$concrete)
{
$this->_binders[$abstract] = $concrete;
}
public function make($abstract)
{
.......
}
public function getBinders()
{
return $this->_binders;
}
}
class Bind
{
.......
}
$binder = new Binder();
$regitser = $binder->getClosure($abstract, $concrete);
$regitser(new $binder->getBinders())

闭包的使用,可以使代码更加的紧凑,耦合性更低,使对代码的结构看起来更加的美观,至于性能问题,是php内核实现的,预编译的时候生成,所以可以不用担心!

Learn And Life.

爱情

Posted on 2016-11-20

“酷暑已至,
常去旁边的冶金学院游泳,
嗮的都成黑炭头,
时时想起我那掏碳的男人,
这想念像甘甜的美酒一样,
令人沉醉,
爱情是对我是初见端倪,
但已使我一洗尘泥,
飘飘欲仙了,
我放纵我的天性,
相信爱情能给予人创造的力量,
我为我的掏碳丈夫感到骄傲,
是的,
真正的爱情,
不应该是利己的,
而应该是利他的,
是心甘情愿的与爱人一起奋斗,
并不断的自我更新的过程,
是融合在一起,
完全融合在一起的共同斗争,
你有没有决心为他而付出自己最大的牺牲,
这是衡量是不是正真爱情的标准,
否则,
就是被自己的感情所欺骗”
—-平凡的世界—-

很羡慕这样的爱情,朴素,充满了力量,给予我的感动都是满满的,有时候也很期盼那种简单而又真实的情感,也想跟我的爱人,有个约定,等待着那天的到来,在我的生命中,要是有田晓霞似的女友,有贺秀莲似的妻子,那该是人生多么幸福的一件事呢?

1…34
Kivmi

Kivmi

代码也是有灵魂的

32 posts
4 tags
© 2018 Kivmi
Powered by Hexo
Theme - NexT.Muse