搜尋

首頁  >  問答  >  主體

php的變長參數的意義是什麼,感覺可以用數組實現啊?

<?php
function test(...$args)
{
    print_r($args);
}

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

可以在呼叫test的時候把參數放到陣列裡啊
這個新特性的必要性是什麼呢?

曾经蜡笔没有小新曾经蜡笔没有小新2796 天前1085

全部回覆(5)我來回復

  • 習慣沉默

    習慣沉默2017-06-14 10:51:43

    意義是你不用單獨聲明一個陣列了

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-14 10:51:43

    你可以理解為語法糖
    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); 
    }
    }
    

    回覆
    0
  • 欧阳克

    欧阳克2017-06-14 10:51:43

    例如你要呼叫介面的時候,很多介面的服務位址是一樣的,但是被各自的類別和方法執行,你要封裝的話,就無法確定參數類型和個數,像$className是你具體的一個一個的類別,$actionName是類別中執行的方法

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

    這樣,你是很難在一處處理各種參數的,方便的就是在具體調用接口編寫時,參數按規則傳遞,但是真正的調用和返回是統一由$params來傳輸的。雖然php是若型,但可能你所呼叫的介面是其它靜態語言寫的,型別也要保持一致。

    當然如果你只是用一次的話,就直接傳遞變數就可以了,不用這麼麻煩。

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-14 10:51:43

    redis.lpush 場景

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

    回覆
    0
  • 迷茫

    迷茫2017-06-14 10:51:43

    就是一個語法糖,不定參數。很多語言都有實現,php也實現了

    回覆
    0
  • 取消回覆