1. 闭包的定义至PHP5.3开始, 引入闭包(Closure)的概念.闭包: 在PHP里跟匿名函数是同一个概念, 本质是一个对象. 用没有名字的函数表示
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020239170836575951693.webp)
2. 闭包的调用闭包既然是一个函数, 那么可以被调用!使用()表示闭包的调用, 表达式$closure()的值是匿名函数的返回值示例代码:
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020240170836576025731.png)
3. 闭包的参数3.1 给闭包传递参数闭包既然是一个函数, 那么可以给闭包传递参数!示例代码:
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020240170836576061404.webp)
另一种写法:
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020240170836576027730.webp)
function($id){return"我是一个带参数的闭包, 参数值=$id";}上图表示闭包的定义(100)上图表示闭包的调用, 100是实参, $id是形参闭包加括号: 表示是一个整体3.2 在闭包内使用外部变量
由于闭包内变量的作用域局限闭包内部, 外部的变量对闭包是不可见的. 如果想在闭包内使用外部变量, 需要使用use () 语法
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020241170836576173929.webp)
4. 闭包作为参数传递闭包既然是一个对象, 那么可以把闭包作为参数传递给其它函数!foo是一个函数, $closure是一个闭包, 本质就是一个对象.$closure作为实数传递给foo的形参$c在foo里调用$c, 并传递
实参调用闭包 给闭包的形参$str最后返回.
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020241170836576169270.webp)
另一种写法
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020241170836576149436.webp)
以上代码等价于:
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020242170836576272468.webp)
5. 闭包在Laravel源码里的应用范例代码: \vendor\laravel\framework\src\Illuminate\Routing\RoutingServiceProvider.php
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020242170836576232427.webp)
![](http://ldjg88.com/zb_users/upload/2024/02/20240220020242170836576283028.webp)
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。