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。
在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。