JavaScript:arguments 對象
<script>
function test() {
for (var i = 0; i < arguments.length; i++) {
alert(arguments[i]);
}
}
test(1, 2, 3, 'abc'); // 依次彈窗 1,2,3,abc
</script>
arguments 為類陣列對象,擁有 length 與索引訪問。
- ES6 可用
function test(...args) 獲取真正陣列。
PHP:func_num_args / func_get_arg / func_get_args
方法一:逐個獲取
<?php
function show_params() {
$count = func_num_args();
for ($i = 0; $i < $count; $i++) {
$param = func_get_arg($i);
echo $param . PHP_EOL;
}
}
show_params(1, 2, 'apple', 3.14);
方法二:一次性獲取陣列(推薦)
<?php
function show_params() {
$params = func_get_args(); // 返回所有參數陣列
foreach ($params as $param) {
echo $param . PHP_EOL;
}
}
show_params(1, 2, 'apple', 3.14);
對比總結
| 特性 | JavaScript | PHP |
| 參數容器 | arguments(類陣列) | func_get_args() 返回陣列 |
| 獲取個數 | arguments.length | func_num_args() |
| 獲取單個 | arguments[i] | func_get_arg($i) |
| ES6/現代寫法 | function(...args) {} | function(...$args) {} (PHP 5.6+) |
| 性能 | arguments 較重 | func_get_args() 較 func_num_args+func_get_arg 快 |
現代 PHP(5.6+)可變參數語法
<?php
function sum(...$numbers) {
return array_sum($numbers);
}
echo sum(1, 2, 3, 4); // 10
// 結合固定參數
function greet($greeting, ...$names) {
foreach ($names as $name) {
echo "$greeting, $name!\n";
}
}
greet('Hello', 'Alice', 'Bob', 'Charlie');
...$args 必須是最後一個參數。
- 內部直接是陣列,無需 func_* 函數,代碼更清晰、性能更好。
- 調用時也可用
... 解包陣列:sum(...[1,2,3])。
最佳實踐
- PHP 5.6+ **優先使用
...$args** 語法,棄用 func_* 系列。
- JS 現代環境優先使用
...args(支援箭頭函數、解構)。
- 需嚴格型別檢查時,PHP 7+ 可結合
array_map 或循環驗證。