Laravel路由中不固定數(shù)量的參數(shù)如何實(shí)現(xiàn)?
前言
laravel是個(gè)好框架,我也在學(xué)習(xí)和使用,并且在公司里推廣,最近在讀 Laravel 源碼的時(shí)候,發(fā)現(xiàn)了一個(gè)段特別有趣的代碼,大家請看:
... 這三個(gè)點(diǎn)是做什么用的呢?我查了 PHP 的手冊后發(fā)現(xiàn),這個(gè)東西叫做可變數(shù)量的參數(shù)列表。
這個(gè)是干啥用的呢?PHP 手冊是這么解釋的。
... 是用戶自定義函數(shù)中支持可變數(shù)量的參數(shù)列表。
... 存在于 PHP 5.6 及以上的版本中。 在 PHP 5.5 及更早版本中,使用函數(shù) func_num_args()
,func_get_arg()
,和 func_get_args()
。
可變數(shù)量的參數(shù)列表,這個(gè)概念可能你會覺得很抽象。
我們可以這么來理解,我們自定義了一個(gè)函數(shù)或者某個(gè) function,但是這個(gè) function 的參數(shù)數(shù)量是不固定的,這也就是可變數(shù)量的參數(shù)列表。
關(guān)于可變數(shù)量的參數(shù)列表,讓我們來看兩個(gè)示例;
<?php function sum(...$numbers) { $acc = 0; foreach ($numbers as $n) { $acc += $n; } return $acc; } echo sum(1, 2, 3, 4); ?>
以上例程會輸出:
10
可變數(shù)量參數(shù)將被傳遞到 function 中,給定的參數(shù)變量會作為數(shù)組。
我們再看一個(gè)示例:
<?php function add($a, $b) { return $a + $b; } echo add(...[1, 2]) ?>
以上例程會輸出:
3
可變數(shù)量參數(shù)將被傳遞到 function 中,給定的數(shù)組會作為參數(shù)變量。
這個(gè)可變數(shù)量參數(shù),又和 Laravel 路由有什么關(guān)系呢?
在 Laravel 中,我們自定義路由是非常自由的,比如是這樣的:
Route::get('user/{id}', 'UsersController@filter'); //路由對應(yīng)的方法 public function filter($id) { # code... }
或許有可能這樣的:
Route::get('user/{id}/{name}', 'UsersController@filter'); //路由對應(yīng)的方法 public function filter($id, $name) { # code... }
Laravel 路由中這樣不固定數(shù)量參數(shù),在代碼中是如何實(shí)現(xiàn)的呢?使用的就是可變數(shù)量參數(shù)。
// */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 作者泰勒腦路清奇??!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- laravel5.1框架基礎(chǔ)之路由詳解
- 修改Laravel5.3中的路由文件與路徑
- Laravel框架路由配置總結(jié)、設(shè)置技巧大全
- Laravel中獲取路由參數(shù)Route Parameters的五種方法示例
- Laravel最佳分割路由文件(routes.php)的方式
- laravel中命名路由的使用方法
- Laravel 5框架學(xué)習(xí)之路由、控制器和視圖簡介
- Laravel中重寫資源路由自定義URL的實(shí)現(xiàn)方法
- Laravel框架模板加載,分配變量及簡單路由功能示例
- Laravel路由研究之domain解決多域名問題的方法示例
- Laravel框架路由設(shè)置與使用示例
- Laravel5.1 框架路由基礎(chǔ)詳解
相關(guān)文章
PHPMAILER實(shí)現(xiàn)PHP發(fā)郵件功能
這篇文章主要為大家詳細(xì)介紹了PHPMAILER實(shí)現(xiàn)PHP發(fā)郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04PHP實(shí)現(xiàn)chrome表單請求數(shù)據(jù)轉(zhuǎn)換為接口使用的json數(shù)據(jù)
這篇文章主要介紹了PHP實(shí)現(xiàn)chrome表單請求數(shù)據(jù)轉(zhuǎn)換為接口使用的json數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Laravel實(shí)現(xiàn)數(shù)據(jù)庫遷移與支持中文的填充
最近在學(xué)習(xí)Laravel數(shù)據(jù)庫方面的內(nèi)容,發(fā)現(xiàn)了一些資料不錯(cuò)整理出來分享給大家,下面這篇文章主要給大家介紹了關(guān)于Laravel實(shí)現(xiàn)數(shù)據(jù)庫遷移與支持中文填充的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-11-11Zend Framework框架之Zend_Mail實(shí)現(xiàn)發(fā)送Email郵件驗(yàn)證功能及解決標(biāo)題亂碼的方法
這篇文章主要介紹了Zend Framework框架之Zend_Mail實(shí)現(xiàn)發(fā)送Email郵件驗(yàn)證功能及解決標(biāo)題亂碼的方法,詳細(xì)分析了Zend_Mail組件實(shí)現(xiàn)郵件發(fā)送的具體步驟,并給出了標(biāo)題亂碼的解決方法,需要的朋友可以參考下2016-03-03php多種形式發(fā)送郵件(mail qmail郵件系統(tǒng) phpmailer類)
這篇文章主要介紹了php多種形式發(fā)送郵件的方法,包括使用mail()函數(shù)、使用管道的形式、使用phpmailer類等方法,大家參考使用吧2014-01-01Laravel+jQuery實(shí)現(xiàn)AJAX分頁效果
這篇文章主要介紹了Laravel+jQuery實(shí)現(xiàn)AJAX分頁效果的方法,簡單介紹了jQuery的ajax調(diào)用結(jié)合Laravel控制器實(shí)現(xiàn)無刷新分頁功能的相關(guān)操作技巧,需要的朋友可以參考下2016-09-09PHP單例模式是什么 php實(shí)現(xiàn)單例模式的方法
PHP單例模式是什么?這篇文章主要介紹了php實(shí)現(xiàn)單例模式的方法,告訴大家為什么使用單例模式,感興趣的朋友可以參考一下2016-05-05