Laravel路由中不固定數量的參數如何?的相關講解

來源:互聯網
上載者:User
最近在學習laravel的時候發現了一個有趣的地方,下面和大家分享下,這篇文章主要給大家介紹了關於Laravel路由中不固定數量的參數是如何?的相關資料,文中通過範例程式碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

laravel是個好架構,我也在學習和使用,並且在公司裡推廣,最近在讀 Laravel 源碼的時候,發現了一個段特別有趣的代碼,大家請看:

... 這三個點是做什麼用的呢?我查了 PHP 的手冊後發現,這個東西叫做可變數量的參數列表。

這個是幹啥用的呢?PHP 手冊是這麼解釋的。

... 是使用者自訂函數中支援可變數量的參數列表。

... 存在於 PHP 5.6 及以上的版本中。 在 PHP 5.5 及更早版本中,使用函數 func_num_args()func_get_arg() ,和 func_get_args()

可變數量的參數列表,這個概念可能你會覺得很抽象。

我們可以這麼來理解,我們自訂了一個函數或者某個 function,但是這個 function 的參數數量是不固定的,這也就是可變數量的參數列表。

關於可變數量的參數列表,讓我們來看兩個樣本;

<?phpfunction sum(...$numbers) { $acc = 0; foreach ($numbers as $n) {  $acc += $n; } return $acc;}echo sum(1, 2, 3, 4);?>

以上常式會輸出:

10

可變數量參數將被傳遞到 function 中,給定的參數變數會作為數組。

我們再看一個樣本:

<?phpfunction add($a, $b) { return $a + $b;}echo add(...[1, 2])?>

以上常式會輸出:

3

可變數量參數將被傳遞到 function 中,給定的數組會作為參數變數。

這個可變數量參數,又和 Laravel 路由有什麼關係呢?

在 Laravel 中,我們自訂路由是非常自由的,比如是這樣的:

Route::get('user/{id}', 'UsersController@filter');//路由對應的方法public function filter($id){ # code...}

或許有可能這樣的:

Route::get('user/{id}/{name}', 'UsersController@filter');//路由對應的方法public function filter($id, $name){ # code...}

Laravel 路由中這樣不固定數量參數,在代碼中是如何?的呢?使用的就是可變數量參數。

// */vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php/** * Dispatch a request to a given controller and method. * * @param \Illuminate\Routing\Route $route * @param mixed $controller * @param string $method * @return mixed */public function dispatch(Route $route, $controller, $method){ $parameters = $this->resolveClassMethodDependencies(  $route->parametersWithoutNulls(), $controller, $method ); if (method_exists($controller, 'callAction')) {  return $controller->callAction($method, $parameters); } return $controller->{$method}(...array_values($parameters));}

不得不讓人佩服 Laravel 作者泰勒腦路清奇啊!

總結

您可能感興趣的文章:

Laravel架構之blade模板新手入門教程

php產生縮圖品質較差解決方案代碼的講解

PHP實現的棧資料結構樣本講解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.