<?php function test(...$args) { print_r($args); } test(1,2,3); //输出 Array ( [0] => 1 [1] => 2 [2] => 3 ) ?>
可以在调用test的时候把参数放到数组里啊这个新特性的必要性是什么呢?
意义是你不用单独声明一个数组了
你可以理解为语法糖func_get_args可以实现,不过有些时候没这么优雅
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 场景
redis.lpush
public function lPush( $key, $value1, $value2 = null, $valueN = null ) {}
就是一个语法糖,不定参数。很多语言都有实现,php也实现了
意义是你不用单独声明一个数组了
你可以理解为语法糖
func_get_args
可以实现,不过有些时候没这么优雅比如你要调用接口的时候,很多接口的服务地址是一样的,但是被各自的类和方法执行,你要封装的话,就无法确定参数类型和个数,像$className是你具体的一个一个的类,$actionName是类中执行的方法
这样,你是很难在一处处理各种参数的,方便的就是在具体调用接口编写时,参数按规则传递,但是真正的调用和返回是统一由$params来传输的。虽然php是若类型,但可能你调用的接口是其它静态语言编写的,类型也要保持一致。
当然如果你只是用一次的话,就直接传递变量就可以了,不用这么麻烦。
redis.lpush
场景就是一个语法糖,不定参数。很多语言都有实现,php也实现了