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

PHP 函數返回多個值:使用 list() 解構陣列的實用技巧

     編輯:PHP 相關知識

PHP 函數返回多個值:使用 list() 解構陣列的實用技巧

PHP 函數原生只能返回單一值,但透過返回陣列並搭配 list()(或 PHP 7.1+ 的 [] 解構語法),即可實現類似 Python、Go 的多返回值效果,程式碼更清晰易讀。

基本範例

<?php
function getUserProfile(): array {
    return [
        'name'     => 'Jason',
        'email'    => 'jason@example.com',
        'language' => 'English',
    ];
}

// PHP 7.1+ 陣列解構語法(推薦)
['name' => $name, 'email' => $email, 'language' => $lang] = getUserProfile();
echo "Name: $name, Email: $email, Language: $lang";

// 舊版 list() 寫法(僅支援數字索引陣列)
// list($name, $email, $language) = array_values(getUserProfile());
?>

進階:返回關聯陣列並指定鍵名解構

<?php
function getCoordinates(): array {
    // 計算複雜邏輯...
    return ['x' => 100, 'y' => 200, 'z' => 300];
}

// 依鍵名解構,順序不重要,可略過不需要的欄位
['x' => $x, 'z' => $z] = getCoordinates();
echo "X: $x, Z: $z"; // Y 被忽略
?>

實際應用場景

  • 資料庫查詢: 返回 ['success' => true, 'data' => [...], 'count' => 42]。
  • 驗證結果: ['valid' => true, 'errors' => [], 'sanitized' => $input]。
  • 檔案處理: ['path' => '/tmp/abc', 'size' => 1024, 'mime' => 'image/png']。
  • API 回應組裝: ['status' => 200, 'body' => $json, 'headers' => []]。

命名慣例建議

為提升可讀性,建議返回關聯陣列並使用語意化鍵名,配合解構時指定鍵名:

<?php
function divide(int $dividend, int $divisor): array {
    if ($divisor === 0) {
        return ['success' => false, 'error' => 'Division by zero'];
    }
    return [
        'success'   => true,
        'quotient'  => intdiv($dividend, $divisor),
        'remainder' => $dividend % $divisor,
    ];
}

// 呼叫端
['success' => $ok, 'quotient' => $q, 'remainder' => $r] = divide(10, 3);
if ($ok) {
    echo "商: $q, 餘數: $r"; // 商: 3, 餘數: 1
}
?>

替代方案:Value Object / DTO 類別

對於固定結構的多返回值,定義專用類別更具類型安全與 IDE 支援:

<?php
class DivisionResult {
    public function __construct(
        public readonly bool $success,
        public readonly int $quotient,
        public readonly int $remainder,
        public readonly ?string $error = null
    ) {}
}

function divideDto(int $dividend, int $divisor): DivisionResult {
    if ($divisor === 0) {
        return new DivisionResult(false, 0, 0, 'Division by zero');
    }
    return new DivisionResult(true, intdiv($dividend, $divisor), $dividend % $divisor);
}

$result = divideDto(10, 3);
if ($result->success) {
    echo "商: {$result->quotient}, 餘數: {$result->remainder}";
}
?>

總結

PHP 透過「返回陣列 + 解構賦值」優雅地實現多返回值。簡單場景用陣列解構即可;複雜、固定結構場景建議使用唯讀 DTO 類別(PHP 8.1+ readonly 屬性),兼具型別安全、自動完成與文檔化優勢。

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