当前位置: 首页 > 后端技术 > PHP

如何在Laravel路由中实现可变参数个数?

时间:2023-03-29 22:23:07 PHP

最近在看Laravel源码的时候,发现了一段特别有意思的代码。请看一看:……这三个点是干什么用的?查了PHP手册,发现这个东西叫可变数量的参数列表。这个是来做什么的?PHP手册是这样解释的。...是一个用户定义的函数,支持可变数量的参数列表。...存在于PHP5.6及更高版本中。在PHP5.5及更早版本中,使用函数func_num_args()、func_get_arg()和func_get_args()。可变数量的参数列表,这个概念对你来说可能看起来很抽象。我们可以这样理解,我们自定义了一个函数或者某个函数,但是这个函数的参数个数是不固定的,是可变个数的参数列表。关于可变数量的参数列表,让我们看两个例子;上面的例程将输出:10个可变数量的参数将传递给函数,给定的参数变量将用作数组。我们再看一个例子:上面的例程会输出:3variablenumbers的参数将传递给函数,给定的数组将用作参数变量。这个可变数字参数与Laravel路由有什么关系?在Laravel中,我们可以很自由的自定义路由,比如这样:Route::get('user/{id}','UsersController@filter');//路由对应的方法publicfunctionfilter($id){#code...}可能是这样的:Route::get('user/{id}/{name}','UsersController@filter');//路由对应的方法publicfunctionfilter($id,$name){#code...}Laravel路由中的可变参数个数在代码中是如何实现的?使用可变数量的参数。//*/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php/***向给定的控制器和方法发送请求。**@param\Illuminate\Routing\Route$route*@parammixed$controller*@paramstring$method*@returnmixed*/publicfunctiondispatch(Route$route,$controller,$method){$parameters=$this复制代码->resolveClassMethodDependencies($route->parametersWithoutNulls(),$controller,$method);如果(method_exists($controller,'callAction')){return$controller->callAction($method,$parameters);}返回$controller->{$method}(...array_values($parameters));}不得不佩服Laravel的作者Taylor,头脑非常清醒!最近有人留言问我,Laravel的路由原理是什么?Laravel的路由是如何分配给Controller中的方法的?在下一篇文章中,我将讲解Laravel路由的实现过程和原理。可以关注我的公众号!