前言
laravel是個好框架,我也在學習和使用,并且在公司里推廣,最近在讀 Laravel 源碼的時候,發現了一個段特別有趣的代碼,大家請看:
... 這三個點是做什么用的呢?我查了 PHP 的手冊后發現,這個東西叫做可變數量的參數列表。
這個是干啥用的呢?PHP 手冊是這么解釋的。
... 是用戶自定義函數中支持可變數量的參數列表。
... 存在于 PHP 5.6 及以上的版本中。 在 PHP 5.5 及更早版本中,使用函數 func_num_args()
,func_get_arg()
,和 func_get_args()
。
可變數量的參數列表,這個概念可能你會覺得很抽象。
我們可以這么來理解,我們自定義了一個函數或者某個 function,但是這個 function 的參數數量是不固定的,這也就是可變數量的參數列表。
關于可變數量的參數列表,讓我們來看兩個示例;
<?php function sum(...$numbers) { $acc = 0; foreach ($numbers as $n) { $acc += $n; } return $acc; } echo sum(1, 2, 3, 4); ?>
以上例程會輸出:
10
可變數量參數將被傳遞到 function 中,給定的參數變量會作為數組。
我們再看一個示例:
<?php function 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 作者泰勒腦路清奇啊!
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對的支持。
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。