zoukankan      html  css  js  c++  java
  • thinkphp 闭包支持

    闭包定义

    我们可以使用闭包的方式定义一些特殊需求的路由,而不需要执行控制器的操作方法了,例如:

    1. 'URL_ROUTE_RULES'=>array(
    2. 'test' =>
    3. function(){
    4. echo 'just test';
    5. },
    6. 'hello/:name' =>
    7. function($name){
    8. echo 'Hello,'.$name;
    9. }

    参数传递

    闭包定义的参数传递在规则路由和正则路由的两种情况下有所区别。

    规则路由

    规则路由的参数传递比较简单:

    1. 'hello/:name' =>
    2. function($name){
    3. echo 'Hello,'.$name;
    4. }

    规则路由中定义的动态变量的名称 就是闭包函数中的参数名称,不分次序。 因此,如果我们访问的URL地址是: http://serverName/Home/hello/thinkphp

    则浏览器输出的结果是: Hello,thinkphp

    如果多个参数可以使用:

    1. 'blog/:year/:month' =>
    2. function($year,$month){
    3. echo 'year='.$year.'&month='.$month;
    4. }
    正则路由

    如果是正则路由的话,闭包函数中的参数就以正则中出现的参数次序来传递,例如:

    1. '/^new/(d{4})/(d{2})$/' =>
    2. function($year,$month){
    3. echo 'year='.$year.'&month='.$month;
    4. }

    如果我们访问: http://serverName/Home/new/2013/03 浏览器输出结果是: year=2013&month=03

    继续执行

    默认的情况下,使用闭包定义路由的话,一旦匹配到路由规则,执行完闭包方法之后,就会中止后续执行。如果希望闭包函数执行后,后续的程序继续执行,可以在闭包函数中使用布尔类型的返回值,例如:

    1. 'hello/:name' =>
    2. function($name){
    3. echo 'Hello,'.$name.'<br/>';
    4. $_SERVER['PATH_INFO'] = 'blog/read/name/'.$name;
    5. return false;
    6. }

    该路由定义中的闭包函数首先执行了一段输出代码,然后重新设置了$_SERVER['PATH_INFO']变量,交给后续的程序继续执行,因为返回值是false,所以会继续执行控制器和操作的检测,从而会执行Blog控制器的read操作方法。

    假设blog控制器中的read操作方法代码如下:

    1. public function read($name){
    2. echo 'read,'.$name.'!<br/>';
    3. }

    如果我们访问的URL地址是: http://serverName/Home/hello/thinkphp

    则浏览器输出的结果是:

    大理石平台检定规程

    1. Hello,thinkphp
    2. read,thinkphp!
  • 相关阅读:
    Executors几种常用的线程池性能比较
    mac上利用minikube搭建kubernetes(k8s)环境
    基于redis的分布式锁二种应用场景
    alibaba canal安装笔记
    开源流媒体服务器SRS学习笔记(4)
    开源流媒体服务器SRS学习笔记(3)
    pygame-KidsCanCode系列jumpy-part18-背景滚动
    开源流媒体服务器SRS学习笔记(2)
    开源流媒体服务器SRS学习笔记(1)
    pygame-KidsCanCode系列jumpy-part17-mask-collide碰撞检测
  • 原文地址:https://www.cnblogs.com/furuihua/p/11777364.html
Copyright © 2011-2022 走看看