Laravel 和匿名函数参数流

Laravel and anonymous functions arguments flow

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

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

参数如何从 .. 我真的需要知道 $id 如何转到 Route::get 函数.. 如果不复制粘贴,语法对我来说很难写。

论据并不神奇"move"。当您执行此操作时,laravel 会采用 path/function 组合并存储它们以备后用。这是所发生情况的简化版本:

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