php5.3有一个非常赞的新特性,那就是支持匿名函数(闭包)。匿名函数可用于动态创建函数,并保存到一个变量中。
function operate($operator){ if($operator == "-"){ return function($a,$b){ return $a-$b; }; }else{ return function($a,$b){ return $a+$b; }; } } $subtraction = operate("-"); echo $subtraction(4,3);//1 $addition = operate("+"); echo $addition(1,2);//3
说明:通过operate函数,我们可以生成不同的函数作为结果返回,并将这个结果直接作为函数调用,上面的代码分别动态创建了减法运算和加法运算函数。
$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->get()的时候才执行了匿名函数并将对象返回,这就实现了按需实例化,不用则不实例化,提高效率。
闭包特性:
经常写js的同学应该知道js的闭包特性,简单的说就是在一个函数里可以定义子函数,父函数中的变量在子函数中可以直接使用,那么PHP的闭包怎么用呢?有一点区别。
function func1($a){ return function() use ($a){ echo $a; }; } $a = func1("a"); $a();//输出a
当你想将外层变量传进内层匿名函数时,使用use (变量)的方式。
a