加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

php 中的closure用法详解

发布时间:2021-01-18 13:23:38 所属栏目:编程 来源:网络整理
导读:Closure,匿名函数,是php5.3的时辰引入的,又称为Anonymous functions。字面意思也就是没有界说名字的函数。好比以下代码(文件名是do.php) 这里的A()永久没有步伐用来作为B的参数,由于A它并不是“匿名”函数。 以是应该改成这样: 实现闭包 将匿名函数在普

我们再看一个demo:

dog; }; /* * 获取Animal实例公有成员属性 */ $pig = function() { return $this->pig; }; $bindCat = Closure::bind($cat,new Animal());// 给闭包绑定了Animal实例的浸染域,但未给闭包绑定$this工具 $bindDog = Closure::bind($dog,new Animal(),'Animal');// 给闭包绑定了Animal类的浸染域,同时将Animal实例工具作为$this工具绑定给闭包 $bindPig = Closure::bind($pig,new Animal());// 将Animal实例工具作为$this工具绑定给闭包,保存闭包原有浸染域 echo $bindCat(),'
';// 输出:加菲猫,按照绑定法则,应承闭包通过浸染域限制操纵符获取Animal类静态私有成员属性 echo $bindDog(),'
';// 输出:汪汪队,按照绑定法则,应承闭包通过绑定的$this工具(Animal实例工具)获取Animal实例私有成员属性 echo $bindPig(),'
';// 输出:猪猪侠,按照绑定法则,应承闭包通过绑定的$this工具获取Animal实例公有成员属性

通过上面的几个例子,着实匿名绑定的领略就不难了....我们在看一个扩展的demo(引入trait特征)

$name)){ return call_user_func($this->$name,$args); }else{ throw new RuntimeException("Method {$name} does not exist"); } } /** * 添加要领 */ public function __set($name,$value) { $this->$name = is_callable($value)? $value->bindTo($this,$this): $value; } } /** * 只带属性不带要领动物类 * * @author fantasy */ class Animal { use DynamicTrait; private $dog = '汪汪队'; } $animal = new Animal; // 往动物类实例中添加一个要领获取实例的私有属性$dog $animal->getdog = function() { return $this->dog; }; echo $animal->getdog();//输出 汪汪队

好比此刻我们用此刻购物情形

products[$item] = $quantity; } /** * 获取单项商品数目 * * @access public * @param string 商品名称 */ public function getQuantity($item) { return isset($this->products[$item]) ? $this->products[$item] : FALSE; } /** * 获取总价 * * @access public * @param string 税率 */ public function getTotal($tax) { $total = 0.00; $callback = function ($quantity,$item) use ($tax,&$total) { $pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($item)); //挪用以上对应的常量 $total += ($pricePerItem * $quantity) * ($tax + 1.0); }; array_walk($this->products,$callback); return round($total,2); } } $my_cart = new Cart; // 往购物车里添加商品及对应数目 $my_cart->add('butter',10); $my_cart->add('milk',3); $my_cart->add('eggs',12); // 打出出总价值,个中有 3% 的贩卖税. echo $my_cart->getTotal(0.03);//输出 1196.4

增补声名:闭包可以行使USE要害毗连外部变量。

总结:PHP闭包的特征着适用CLASS就可以实现相同乃至强盛得多的成果,更不能和js的闭包相提并论了吧,只能等候PHP往后对闭包支持的改造。不外匿名函数照旧挺有效的,好比在行使preg_replace_callback等之类的函数可以不消在外部声明回调函数了。公道行使闭包能使代码越发简捷和精辟。

以上所述是小编给各人先容的php 中的closure用法详解,但愿对各人有所辅佐。措施员碰着题目城市上(编程之家52php.cn)查找题目解答要领!假如认为站点还不错,顺手转发给措施员伴侣一下!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读