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

PHP的学习-PHP的闭包

php 搞代码 3年前 (2022-01-24) 31次浏览 已收录 0个评论

PHP的学习–PHP的闭包

php的闭包(Closure)也就是匿名函数,是PHP5.3引入的。

闭包的语法很简单,需要注意的关键字就只有use,use是连接闭包和外界变量。

<span style="color: #800080">$a</span> = <span style="color: #0000ff">function</span>() <span style="color: #0000ff">use</span>(<span style="color: #800080">$b</span>) {}

简单例子如下:

<span style="color: #0000ff">function</span> <span style="color: #0000ff">callback</span>(<span style="color: #800080">$fun</span><span style="color: #000000">) {</span><span style="color: #800080">$fun</span><span style="color: #000000">();}</span><span style="color: #800080">$msg</span> = "Hello, everyone"<span style="color: #000000">;</span><span style="color: #800080">$fun</span> = <span style="color: #0000ff">function</span> () <span style="color: #0000ff">use</span>(<span style="color: #800080">$msg</span><span style="color: #000000">) {</span><span style="color: #0000ff">print</span> "This is a closure use string value, msg is: <span style="color: #800080">$msg</span>. <br />/n"<span style="color: #000000">;};</span><span style="color: #800080">$msg</span> = "Hello, everybody"<span style="color: #000000">;</span><span style="color: #0000ff">callback</span>(<span style="color: #800080">$fun</span>);

结果是:This is a closure use string value, msg is: Hello, everyone.
/n

在PHP新开放的闭包语法中, 我们用use来使用闭包外部定义的变量的。这里我们使用了外部变量$msg,定义完之后,又对其本#文来源gaodai$ma#com搞$$代**码网$值进行了改变,闭包被执行后输出的是原始值。以传值方式传递的基础类型参数,闭包use的值在闭包创建是就确定了。

小应用如下:

<span style="color: #008000">/*</span><span style="color: #008000">*  * 一个利用闭包的计数器产生器  * 这里其实借鉴的是python中介绍闭包时的例子...  * 我们可以这样考虑:  *      1. counter函数每次调用, 创建一个局部变量$counter, 初始化为1.  *      2. 然后创建一个闭包, 闭包产生了对局部变量$counter的引用.  *      3. 函数counter返回创建的闭包, 并销毁局部变量, 但此时有闭包对$counter的引用,   *          它并不会被回收, 因此, 我们可以这样理解, 被函数counter返回的闭包, 携带了一个游离态的  *          变量.  *      4. 由于每次调用counter都会创建独立的$counter和闭包, 因此返回的闭包相互之间是独立的.  *      5. 执行被返回的闭包, 对其携带的游离态变量自增并返回, 得到的就是一个计数器.  * 结论: 此函数可以用来生成相互独立的计数器.  </span><span style="color: #008000">*/</span>  <span style="color: #0000ff">function</span><span style="color: #000000"> counter() {      </span><span style="color: #800080">$counter</span> = 1<span style="color: #000000">;      </span><span style="color: #0000ff">return</span> <span style="color: #0000ff">function</span>() <span style="color: #0000ff">use</span>(&<span style="color: #800080">$counter</span>) {<span style="color: #0000ff">return</span> <span style="color: #800080">$counter</span> ++<span style="color: #000000">;};  }  </span><span style="color: #800080">$counter1</span> =<span style="color: #000000"> counter();  </span><span style="color: #800080">$counter2</span> =<span style="color: #000000"> counter();  </span><span style="color: #0000ff">echo</span> "counter1: " . <span style="color: #800080">$counter1</span>() . "<br />/n"<span style="color: #000000">;  </span><span style="color: #0000ff">echo</span> "counter1: " . <span style="color: #800080">$counter1</span>() . "<br />/n"<span style="color: #000000">;  </span><span style="color: #0000ff">echo</span> "counter1: " . <span style="color: #800080">$counter1</span>() . "<br />/n"<span style="color: #000000">;  </span><span style="color: #0000ff">echo</span> "counter1: " . <span style="color: #800080">$counter1</span>() . "<br />/n"<span style="color: #000000">;  </span><span style="color: #0000ff">echo</span> "counter2: " . <span style="color: #800080">$counter2</span>() . "<br />/n"<span style="color: #000000">;  </span><span style="color: #0000ff">echo</span> "counter2: " . <span style="color: #800080">$counter2</span>() . "<br />/n"<span style="color: #000000">;  </span><span style="color: #0000ff">echo</span> "counter2: " . <span style="color: #800080">$counter2</span>() . "<br />/n"<span style="color: #000000">;  </span><span style="color: #0000ff">echo</span> "counter2: " . <span style="color: #800080">$counter2</span>() . "<br />/n"<span style="color: #000000">;  </span>?>

闭包的作用


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

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

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

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