Laravel和匿名函数参数流

时间:2015-08-01 16:57:10

标签: php laravel anonymous

在Laravel 5中,我无法理解内部和外部函数(匿名函数)之类的参数的移动

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

参数如何移动..我真的需要知道$ id如何转到Route :: get函数..我的语法很难在没有copy n paste的情况下编写。

1 个答案:

答案 0 :(得分:2)

这些论点并没有神奇地“移动”。执行此操作时,laravel将获取路径/功能组合并将其存储以供日后使用。这是发生的事情的简化版本:

class Route
{
     private static $GET = array();

     public static function get($path, $callback)
     {
         self::$GET[] = array($path, $callback);
     }
}

然后,在添加所有路由后,它会检查调用网页的URL,并找到与其匹配的路径。有一些内部过程会为每条路线选择$path并将其转换为正则表达式,例如#user/(?P<id>.+)#,因此只需使用preg_match()等匹配即可。成功点击后,它会停止并提取变量:

'/user/foobar' has the username extracted: array('id' => 'foobar')

然后使用reflection将回调中的参数与来自URL的数据进行匹配。

$callback_reflection = new ReflectionFunction($callback);
$arguments = $callback_reflection->getParameters();
/* some algorithm to match the data and store in $args */
$result = $callback_reflection->invokeArgs($args);

invokeArgs()方法将使用正确的参数执行回调。这里没有太大的魔力。有关详细信息,请参阅Router class