控制器方法中的参数顺序

时间:2019-05-07 19:54:01

标签: php laravel function arguments

假设我们在Laravel中有以下路线:

Route::get('/blog/{id}/{slug}', ['as' => 'blog', 'uses' => 'Front\PostController@single']);

其中 {id} {slug} 是变量,并将作为参数传递给 single()方法的参数> PostController 类,如下所示:

public function single($id, $slug) {}

但是您也可以传递 Request 对象,如下所示:

public function single(Request $request, $id, $slug) {}

甚至:

public function single($id, $slug, Request $request) {}

Laravel仍然可以很好地处理它们……看起来参数的顺序不一致,或者应用了某些特殊技术?

2 个答案:

答案 0 :(得分:0)

参数的顺序并不重要,除非您在这些参数中使用默认值(自PHP 5.6+起可用),如下所示:

function something($foo, $bar=true) { ... }

应该是参数中的最后一个。

请查看有关"use of default parameters in functions"的官方PHP文档:

  

默认值必须是一个常量表达式,而不是(例如)变量,类成员或函数调用。

     

请注意,使用默认参数时,任何默认值都应位于所有非默认参数的右侧;否则,事情将无法按预期进行。

答案 1 :(得分:0)

使用时:

公共功能单($ id,$ slug,Request $ request){}

您从Request类开始指定$ request的类型。因此,laravel没有使用任何特殊的技术,而只是PHP的哲学,即当您指定类型时,它会维护订单本身。

但是,是的,laravel肯定会使用某些逻辑来使用$ request对象中的所有请求数据。