PHP 本身不支援傳統意義上的函式多載(同名函式依參數不同而有多種定義),但我們可以透過內建函式 func_get_args() 與 func_num_args(),或是善用預設參數值,來達到類似多載的效果,讓同一個函式能依據傳入參數的數量或型態執行不同邏輯。
利用 func_get_args() 取得所有傳入參數陣列,搭配 func_num_args() 判斷參數個數,進而分派至對應的內部處理函式。
<?php
function rewrite() {
$args = func_get_args();
if (func_num_args() == 1) {
func1($args[0]);
} elseif (func_num_args() == 2) {
func2($args[0], $args[1]);
}
}
function func1($arg) {
echo $arg;
}
function func2($arg1, $arg2) {
echo $arg1, ' ', $arg2;
}
rewrite('PHP'); // 輸出:PHP
rewrite('PHP', 'China'); // 輸出:PHP China
?>
這種寫法適合參數個數固定但型態可能不同的情境,邏輯集中在單一進入點,維護相對容易。
直接在函式宣告時給予參數預設值,呼叫端可選擇性傳遞參數,未傳遞則使用預設值。這是最簡單、最常見的「偽多載」手法。
<?php
function test($name = "小李", $age = "23") {
echo $name . " " . $age;
}
test(); // 輸出:小李 23
test("a"); // 輸出:a 23
test("a", "b"); // 輸出:a b
?>
預設參數讓介面更乾淨,呼叫端不需記住多個函式名稱,適合參數具備合理預設值的場景。
func_get_args() + func_num_args()。