PHP 允許函數參數指定預設值,呼叫時省略該參數即使用預設值。本文示範語法、型別宣告、預設值運算式與常見陷阱。
<?php
function capitalize(string $str, bool $each = true): void {
$str = strtolower($str);
if ($each) {
$str = ucwords($str);
} else {
$str = strtoupper($str);
}
echo "$str\n";
}
capitalize("hEllo WoRld!"); // Hello World!
capitalize("hEllo WoRld!", false); // HELLO WORLD!
?>
<?php
function greet(string $name = 'Guest', string $time = date('H:i')): void {
echo "Hello $name, current time: $time\n";
}
greet(); // Hello Guest, current time: 14:30
greet('Alice'); // Hello Alice, current time: 14:30
greet('Bob', '09:00'); // Hello Bob, current time: 09:00
?>
預設值可為標量運算式(算術、字串串接、函數呼叫、new Class()、[] 陣列),但不可使用變數或常數(除非是類別常數)。
function foo($a = 1, $b) {} → Fatal Error。<?php
// PHP 7.0+ 型別宣告
function process(array $data = [], int $limit = 10, ?string $prefix = null): void {
// $data 預設空陣列,$limit 預設 10,$prefix 可為 null
}
process(); // 皆用預設值
process(['a','b']); // $data 指定,其餘預設
process(['a','b'], 5, 'PRE'); // 全部指定
?>
<?php
function sum(int ...$numbers): int {
return array_sum($numbers);
}
echo sum() . "\n"; // 0 (空陣列)
echo sum(1,2,3) . "\n"; // 6
?>
善用參數預設值可減少多載函數數量,提升 API 彈性。注意參數順序規則,PHP 8+ 支援運算式預設值更強大。希望本文對您的 PHP 程式設計有所幫助。