php的变长参数的意义是什么,感觉可以用数组实现啊?
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-06-14 10:49:43
[PHP讨论组]
<?php
function test(...$args)
{
    print_r($args);
}

test(1,2,3);
//输出
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
?>

可以在调用test的时候把参数放到数组里啊
这个新特性的必要性是什么呢?

曾经蜡笔没有小新
曾经蜡笔没有小新

全部回复(5)
習慣沉默

意义是你不用单独声明一个数组了

我想大声告诉你

你可以理解为语法糖
func_get_args可以实现,不过有些时候没这么优雅

function sort($mode,...$args) {
  if($mode === SORT_DESC) {
      print_r($args);
  }
}

function sort() {
 $args = func_get_args();
 if($args[0] === SORT_DESC){
  array_shift($args);// 去除mode
   print_r($args); 
}
}
欧阳克

比如你要调用接口的时候,很多接口的服务地址是一样的,但是被各自的类和方法执行,你要封装的话,就无法确定参数类型和个数,像$className是你具体的一个一个的类,$actionName是类中执行的方法

call_user_func_array([$className, $actionName], $params)

这样,你是很难在一处处理各种参数的,方便的就是在具体调用接口编写时,参数按规则传递,但是真正的调用和返回是统一由$params来传输的。虽然php是若类型,但可能你调用的接口是其它静态语言编写的,类型也要保持一致。

当然如果你只是用一次的话,就直接传递变量就可以了,不用这么麻烦。

我想大声告诉你

redis.lpush 场景

public function lPush( $key, $value1, $value2 = null, $valueN = null ) {}
迷茫

就是一个语法糖,不定参数。很多语言都有实现,php也实现了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号