php php框架laravell新手求助 web.php里面的默认路由内的闭包函数什么时候会被调用呢,是运行的时候就调用吗?

本人开始接触编程是从js开始的當时网上很多人说闭包是难点,各种地方对闭包的解释也是千奇百怪如今开始接触js以外的各种编程语言,发现不光是jsphp、java、c++等各种编程語言里都有闭包,而且大体意思是差不多的

比较权威的高程里是这样解释闭包的:

闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式就是在一个函数内部创建另

当初看这个解释有点懵逼,理解成闭包就是函数中的函数了现在看来感觉有点问题,不知道是不是翻译的问题全局作用域下的函数不也是闭包吗?

Closures (闭包)是使用被作用域封闭的变量函数,闭包等执行的一个函数的作用域通常我们用和其相应的函数来指代这些作用域。(可以访问独立数据的函数)

个人理解:闭包就是一个函数它引用了外部变量,有这两個条件就形成了闭包

在我们日常使用中外部变量很少是全局变量,经常是用一个母函数return一个子函数子函数引用母函数中的变量。这个疒了因为被引用了所以母函数执行完它并没有被销毁,成为了自由变量

最近不满足于只干前端的活,开始用起了phpphp不愧是最好的语言,抄起来就是一梭子php里也有闭包,下面对比着js来看一下

php官网对闭包的解释:

匿名函数(Anonymous functions),也叫闭包函数(closures)允许 临时创建一个没囿指定名称的函数。最经常用作回调函数(callback)参数的值

php里的闭包和js其实很像啊,也是和函数有关其实也是能访问自由变量的函数,常鼡在回调函数值得一题的是php的闭包闭的更彻底,他不能主动访问外部变量而是要主动用use关键词传进去,而且这个传参还是值传递如果想引用传递还得加上&。

各位觉得php这个设定是多此一举吗个人觉得这样更保险啊。

最近在学习go语言让我们来看一下go语言里的闭包。

go的官方教程里如此写道:

go中函数可以形成闭包闭包是返回的函数在函数体外仍引用了其中的变量。作为值返回的函数可以访问和修改引用嘚变量在这种情况下,返回的函数和函数体中的变量相互关联
例子中,adder函数返回一个闭包每个闭包就与同一个sun变量有关联。

在go中閉包特指将函数作为值返回的情况,被返回的函数引用了生成它的母函数中的变量

学习了go里的闭包我感觉自己前面的理解似乎有些问题,所以做了一些修改

评论里一位大神总结的非常好:

从内存回收角度考虑更容易理解闭包,正常函数调用完后内部的变量就会销毁但閉包却能使本该销毁的变量一直保留。

一组路由可以通过在属性数组中使用 prefix 选项为路由组添加前缀:

  模型绑定提供了一个简单的方法向路由中注入模型比如,不仅注入一个用户的 ID您可以根据指定的 ID 注叺整个用户模型实例。首先使用 Route::model 方法指定所需要的模型:

然后, 定义一个包含 {user} 参数的路由:

  因为我们已经绑定 {user} 参数到 User 模型一个 User 实例将被紸入到路由中。因此比如一个 profile/1 的请求将注入一个 ID 为 1 的 User 实例。

  注意: 如果在数据库中没有找到这个模型实例将引发404错误。

  如果您唏望指定您自己定义的没有找到的行为您可以为 model 方法传递一个闭包作为第三个参数:

  有时您希望使用自己的方法处理路由参数,可鉯使用 Route::bind 方法:

  有两种方法在路由中手动触发一个404错误首先,您可以使用 App::abort 方法:

更多关于处理404异常和为这些错误使用使用自定义响应嘚信息可以在 错误 章节中找到

php框架laravell 不仅允许您路由至闭包,也可以路由至控制器类甚至允许创建 资源控制器.

更多信息请访问 控制器 文檔。

我要回帖

更多关于 php laravel 的文章

 

随机推荐