• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP中闭包的使用

php 搞代码 4年前 (2022-01-23) 15次浏览 已收录 0个评论

PHP中闭包的使用

例子一

<code><span><?php</span><span>/** * 代码中有一个Di容器用来保存<strong>对象</strong>实例,然后通过set()方法注册服务,通过get()方法获取服务。 * 我们看到$di->set()的时候,使用了匿名函数,我们预先注册了zhangsan和lisi两个服务,这两个服务都是User类的实例, * 在$di->set的时候实际上并没有实例化,而是在$di->get()的时候才执行了匿名函数并将<strong>对象</strong>返回, * 这就实现了**按需实例化,不用则不实例化,提高效率**。 */</span><span><span>class</span><span>Di</span> {</span><span>private</span><span>$_factory</span>;    <span>public</span><span><span>function</span><span>set</span><span>(<span>$id</span>, <span>$value</span>)</span> {</span><span>$this</span>->_factory[<span>$id</span>] = <span>$value</span>;    }    <span>public</span><span><span>function</span><span>get</span><span>(<span>$id</span>)</span> {</span><span>$value</span> = <span>$this</span>->_factory[<span>$id</span>];        <span>return</span><span>$value</span>();    }}<span><span>class</span><span>User</span> {</span><span>private</span><span>$_username</span>;    <span><span>function</span><span>__construct</span><span>(<span>$username</span> = <span>""</span>)</span> {</span><span>$this</span>->_username = <span>$username</span>;    }    <span><span>function</span><span>getUserName</span><span>()</span> {</span><span>return</span><span>$this</span>->_username;    }}<span>//从这里开始看</span><span>$di</span> = <span>new</span> Di();<span>$di</span>->set(<span>"zhangsan"</span>, <span><span>function</span><span>()</span> {</span><span>return</span><span>new</span> User<p>5本文来源gao!daima.com搞$代!码#网#</p><pre>搞代gaodaima码

(‘张三’);});$di->set(“lisi”, function() {returnnew User(“李四”);});echo$di->get(“zhangsan”)->getUserName();echo$di->get(“lisi”)->getUserName();

例子二

<code><span>/** * 一个基本的购物车,包括一些已经添加的商品和每种商品的数量。 * 其中有一个方法用来计算购物车中所有商品的总价格。该方法使用了一个closure作为回调函数。 */</span><span><span>class</span><span>Cart</span> {</span><span>const</span> PRICE_BUTTER = <span>1.00</span>;    <span>const</span> PRICE_MILK = <span>3.04</span>;    <span>const</span> PRICE_EGGS = <span>6.95</span>;    <span>protected</span><span>$products</span> = <span>array</span>();    <span>public</span><span><span>function</span><span>add</span><span>(<span>$product</span>, <span>$quantity</span>)</span> {</span><span>$this</span>->products[<span>$product</span>] = <span>$quantity</span>;    }    <span>public</span><span><span>function</span><span>getQuantity</span><span>(<span>$product</span>)</span> {</span><span>return</span><span>isset</span>(<span>$this</span>->products[<span>$product</span>]) ? <span>$this</span>->products[<span>$product</span>] : <span>FALSE</span>;    }    <span>public</span><span><span>function</span><span>getTotal</span><span>(<span>$tax</span>)</span> {</span><span>$total</span> = <span>0.00</span>;        <span>$callback</span> = <span><span>function</span><span>(<span>$quantity</span>, <span>$product</span>)</span><span>use</span><span>(<span>$tax</span>, &<span>$total</span>)</span> {</span><span>$pricePerItem</span> = constant(<span>__CLASS__</span> . <span>"::PRICE_"</span> . strtoupper(<span>$product</span>));            <span>$total</span> += (<span>$pricePerItem</span> * <span>$quantity</span>) * (<span>$tax</span> + <span>1.0</span>);        };        array_walk(<span>$this</span>->products, <span>$callback</span>);        <span>return</span> round(<span>$total</span>, <span>2</span>);    }}<span>$my_cart</span> = <span>new</span> Cart;<span>// 往购物车里添加条目</span><span>$my_cart</span>->add(<span>'butter'</span>, <span>1</span>);<span>$my_cart</span>->add(<span>'milk'</span>, <span>3</span>);<span>$my_cart</span>->add(<span>'eggs'</span>, <span>6</span>);<span>// 打出出总价格,其中有 5% 的销售税.</span><span>print</span><span>$my_cart</span>->getTotal(<span>0.05</span>) . <span>"\n"</span>;<span>// The result is 54.29</span></code>

以上就介绍了PHP中闭包的使用,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP中闭包的使用
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址