Laravel路由中不固定数量的参数如何实现?

 更新时间:2017年12月10日 11:56:04   作者:無铭  
最近在学习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 作者泰勒脑路清奇啊!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • PHPMAILER实现PHP发邮件功能

    PHPMAILER实现PHP发邮件功能

    这篇文章主要为大家详细介绍了PHPMAILER实现PHP发邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • PHP实现chrome表单请求数据转换为接口使用的json数据

    PHP实现chrome表单请求数据转换为接口使用的json数据

    这篇文章主要介绍了PHP实现chrome表单请求数据转换为接口使用的json数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Laravel实现数据库迁移与支持中文的填充

    Laravel实现数据库迁移与支持中文的填充

    最近在学习Laravel数据库方面的内容,发现了一些资料不错整理出来分享给大家,下面这篇文章主要给大家介绍了关于Laravel实现数据库迁移与支持中文填充的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-11-11
  • Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法

    Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法

    这篇文章主要介绍了Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法,详细分析了Zend_Mail组件实现邮件发送的具体步骤,并给出了标题乱码的解决方法,需要的朋友可以参考下
    2016-03-03
  • Yii2压缩PHP中模板代码的输出问题

    Yii2压缩PHP中模板代码的输出问题

    在Web开发中,无论是PHP的框架还是Python的框架,都会遇到使用模板的时候,在使用模板时会发现代码混乱不堪,怎么解决呢?下面小编给大家带来了Yii2压缩PHP中模板代码的输出问题,感兴趣的朋友一起看看吧
    2018-08-08
  • PHP单例模式详细介绍

    PHP单例模式详细介绍

    这篇文章主要介绍了PHP单例模式详细介绍,本文讲解了单例模式的概念、单例模式的特点、使用单例模式的原因及场景及PHP单例模式代码实例,需要的朋友可以参考下
    2015-07-07
  • laravel框架模型、视图与控制器简单操作示例

    laravel框架模型、视图与控制器简单操作示例

    这篇文章主要介绍了laravel框架模型、视图与控制器简单操作,结合简单示例形式分析了laravel框架模型、视图与控制器的基本操作技巧,需要的朋友可以参考下
    2019-10-10
  • php多种形式发送邮件(mail qmail邮件系统 phpmailer类)

    php多种形式发送邮件(mail qmail邮件系统 phpmailer类)

    这篇文章主要介绍了php多种形式发送邮件的方法,包括使用mail()函数、使用管道的形式、使用phpmailer类等方法,大家参考使用吧
    2014-01-01
  • Laravel+jQuery实现AJAX分页效果

    Laravel+jQuery实现AJAX分页效果

    这篇文章主要介绍了Laravel+jQuery实现AJAX分页效果的方法,简单介绍了jQuery的ajax调用结合Laravel控制器实现无刷新分页功能的相关操作技巧,需要的朋友可以参考下
    2016-09-09
  • PHP单例模式是什么 php实现单例模式的方法

    PHP单例模式是什么 php实现单例模式的方法

    PHP单例模式是什么?这篇文章主要介绍了php实现单例模式的方法,告诉大家为什么使用单例模式,感兴趣的朋友可以参考一下
    2016-05-05

最新评论