如何将PHP闭包转发给另一个控制器

时间:2013-03-30 14:21:39

标签: php

我正在尝试创建一个非常基本的路由类并通过示例学习PHP闭包。基本上,我想在Laravel中创建一个路由功能,但只能使用闭包。

function get($uri)
{
   if($uri == '/account')
   {
      return true;
   }
   else
   {
      return false;
   }
}

function Boo()
{
  echo "Boo";
}

$route = new Route();

$route->get('/account', function() { 
   return $route->Boo();
});

我可以在没有闭包的情况下执行此操作,并将“Boo”视为输出。

如何使用闭包来做到这一点?我目前看到空白输出。

聚苯乙烯。功能正确。

1 个答案:

答案 0 :(得分:3)

你需要实际接受闭包作为你的get方法的参数,然后调用它,这是一个例子

class Route
{
    function get($uri, Closure $closure=null)
    {
        if($uri == '/account')
        {
            // if the closure exists, call it, passing it this instance as its parameter
            if (null !== $closure) {
                $closure($this);
            }
            return true;
        }
        else
        {
            return false;
        }
    }

    function Boo()
    {
        echo "Boo";
    }
}
$route = new Route();

// have the closure accept a route as it's parameter
$route->get('/account', function($route) { 
    return $route->Boo();
});