中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現Laravel路由中不固定數量的參數

發布時間:2021-02-04 10:30:52 來源:億速云 閱讀:138 作者:小新 欄目:開發技術

這篇文章主要介紹怎么實現Laravel路由中不固定數量的參數,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

前言

laravel是個好框架,我也在學習和使用,并且在公司里推廣,最近在讀 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 作者泰勒腦路清奇啊!

以上是“怎么實現Laravel路由中不固定數量的參數”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

麻江县| 天水市| 嵊州市| 中西区| 广昌县| 寿阳县| 额尔古纳市| 南安市| 枣强县| 平武县| 沾化县| 靖州| 怀柔区| 攀枝花市| 松溪县| 拜城县| 金湖县| 嘉峪关市| 衢州市| 阿克苏市| 阜宁县| 定陶县| 桐梓县| 抚宁县| 庆安县| 徐汇区| 葫芦岛市| 明光市| 建阳市| 金坛市| 乾安县| 和田市| 阳江市| 滕州市| 乌海市| 务川| 来凤县| 容城县| 中江县| 喀喇沁旗| 类乌齐县|