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

PHP 可變參數函數:func_get_args()、... 運算子與最佳實務

     編輯:PHP 相關知識

前言

PHP 支援不定數量參數函數,早期使用 func_get_args(),PHP 5.6+ 引入 ... 運算子( variadic operator)提供更清晰語法與型別提示。本文完整比較兩種寫法。

傳統寫法:func_get_args()

<?php
function addAnything() {
    $total = 0;
    $args = func_get_args(); // 取得所有參數陣列
    foreach ($args as $arg) {
        if (is_int($arg)) {
            $total += $arg;
        }
    }
    return $total;
}

echo addAnything(1, 5, 7, 8, 11) . "\n"; // 32
?>

現代寫法:... 運算子(PHP 5.6+)

<?php
function addAnythingModern(int ...$numbers): int {
    return array_sum($numbers);
}

echo addAnythingModern(1, 5, 7, 8, 11) . "\n"; // 32
// echo addAnythingModern(1, 'a', 3); // TypeError: Argument must be int
?>

關鍵差異比較

進階:混合固定參數與可變參數

<?php
function buildQuery(string $table, string $where = '', string ...$columns): string {
    $cols = $columns ? implode(', ', $columns) : '*';
    $sql = "SELECT $cols FROM $table";
    if ($where) $sql .= " WHERE $where";
    return $sql;
}

echo buildQuery('users') . "\n";                    // SELECT * FROM users
echo buildQuery('users', 'id>10', 'id', 'name') . "\n"; // SELECT id, name FROM users WHERE id>10
?>

解包陣列傳入可變參數

<?php
$nums = [1, 2, 3];
echo addAnythingModern(...$nums); // 6
?>

總結

新專案請完全採用 ...$param 可變參數語法,獲得型別安全、IDE 支援與語意清晰度。舊專案維護時理解 func_get_args() 行為即可。希望本文對您的 PHP 程式設計有所幫助。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性func_get_args()... 運算子
型別檢查無(執行時手動檢查)支援型別宣告(編譯/執行時強制)
參數命名無(只能用 $args[0])有語意名稱($numbers)
IDE 支援弱完整(參數提示、重構)
效能稍慢(建立陣列)優化較好
相容性PHP 4+PHP 5.6+