PHP 函數參數可指定預設值,呼叫時省略該參數即自動使用預設值。預設值必須是常數值(標量、陣列、null),不能是變數或函數呼叫。
<?php
function capitalize($str, $each = true) {
$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!
?>
null 作為預設值,函數內再判斷給預設Type $param = default 型別提示function connect($host, $port = null, $timeout = null) {
$port ??= 3306;
$timeout ??= 5;
// ...
}
PHP 不支援命名參數(PHP 8.0 前),若要跳過中間參數需全部傳遞或重構:
// PHP 8.0+ 命名參數
capitalize($str, each: false);
// 舊版:封裝選項陣列
function capitalizeOpt($str, array $opt = []) {
$each = $opt['each'] ?? true;
// ...
}
capitalizeOpt("test", ['each'=>false]);
// 錯誤:預設值使用變數
$default = "abc";
function foo($x = $default) {} // Fatal error
// 錯誤:預設值參數在前
function bar($a = 1, $b) {} // Fatal error
null + 函數內 ??= 給真正預設,避免「可變預設值」陷阱善用參數預設值簡化呼叫,注意規則與陷阱。