首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 函數默認參數值用法詳解:定義、調用與類型陷阱

     編輯:PHP 相關知識

PHP 函數默認參數值用法詳解

PHP 允許為函數參數指定默認值,調用時省略該參數即自動使用默認值,極大增強 API 靈活性。本文通過示例講解語法、調用規則及常見類型陷阱。

基本語法與示例

<?php
function capitalize($str, $each = true) {
    $str = strtolower($str);
    if ($each === true) {
        $str = ucwords($str);      // 每個單詞首字母大寫
    } else {
        $str = strtoupper($str);   // 全部大寫
    }
    echo "$str 
"; } capitalize("hEllo WoRld!"); // 使用默認 $each=true → Hello World! capitalize("hEllo WoRld!", false); // 顯式傳遞 false → HELLO WORLD! ?>

關鍵規則

  1. 默認值必須是常量表達式:不能是變量、類成員、函數調用(如 time())、new Class() 等。
    // ❌ 錯誤
    function foo($a = time()) {}
    function bar($b = $someVar) {}
    function baz($c = new DateTime()) {}
    
    // ✅ 正確
    function foo($a = 0) {}
    function bar($b = 'default') {}
    function baz($c = []) {}
    
  2. 帶默認值的參數必須位於無默認值參數之後:
    // ❌ 錯誤
    function foo($a = 1, $b) {}
    
    // ✅ 正確
    function foo($b, $a = 1) {}
    
  3. 傳遞 null 不會觸發默認值:foo(null) 會將參數設置為 null,而非默認值。需用 foo() 省略參數。
  4. 類型聲明兼容(PHP 7.0+):function foo(int $a = 0) 合法,默認值需符合類型約束。

進階技巧

1. 利用可變參數 + 默認值模擬重載

function query($sql, $params = [], $fetchMode = PDO::FETCH_ASSOC) { ... }
$query("SELECT * FROM users");
$query("SELECT * FROM users WHERE id=?", [1]);
$query("SELECT * FROM users", [], PDO::FETCH_OBJ);

2. 默認值為新建對象/資源的延遲初始化模式

function getLogger($logger = null) {
    if ($logger === null) {
        $logger = new Monolog\Logger('app');
    }
    return $logger;
}

常見陷阱對比

代碼結果說明
foo()使用默認值正確
foo(null)參數=null不觸發默認值
foo(0)參數=0顯式傳遞
function($a=[]){$a[]=1;}每次調用共享同一數組?❌ PHP 中默認值在定義時求值,每次調用都是新數組,安全

善用默認參數,能編寫出接口簡潔、向後兼容、易於擴展的函數簽名,是 PHP 開發者必備基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved