<?php
function test(...$args)
{
print_r($args);
}
test(1,2,3);
//輸出
Array
(
[0] => 1
[1] => 2
[2] => 3
)
?>
Sie k?nnen die Parameter beim Aufruf von test in das Array einfügen.
Was ist die Notwendigkeit dieser neuen Funktion?
你可以理解為語法糖func_get_args
可以實現(xiàn),不過有些時候沒這么優(yōu)雅
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);
}
}
比如你要調(diào)用接口的時候,很多接口的服務(wù)地址是一樣的,但是被各自的類和方法執(zhí)行,你要封裝的話,就無法確定參數(shù)類型和個數(shù),像$className是你具體的一個一個的類,$actionName是類中執(zhí)行的方法
call_user_func_array([$className, $actionName], $params)
這樣,你是很難在一處處理各種參數(shù)的,方便的就是在具體調(diào)用接口編寫時,參數(shù)按規(guī)則傳遞,但是真正的調(diào)用和返回是統(tǒng)一由$params來傳輸?shù)?。雖然php是若類型,但可能你調(diào)用的接口是其它靜態(tài)語言編寫的,類型也要保持一致。
當(dāng)然如果你只是用一次的話,就直接傳遞變量就可以了,不用這么麻煩。
redis.lpush
場景
public function lPush( $key, $value1, $value2 = null, $valueN = null ) {}