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

PHP 函數回傳值機制:單值、多值模擬、參考回傳、型別宣告與最佳實踐

     編輯:PHP 相關知識

基礎回傳

<?php
function add(int $a, int $b): int {
    return $a + $b;
}
$result = add(2, 3); // 5
?>

return 立即結束函數,可省略(隱含回傳 null)。

模擬多值回傳

陣列解構 (PHP 7.1+)

<?php
function stats(array $numbers): array {
    return [
        'sum' => array_sum($numbers),
        'avg' => array_sum($numbers) / count($numbers),
        'min' => min($numbers),
        'max' => max($numbers),
    ];
}
['sum' => $sum, 'avg' => $avg] = stats([1,2,3,4,5]);
echo "Sum: $sum, Avg: $avg";
?>

list() 與陣列索引

<?php
function swap($a, $b) {
    return [$b, $a];
}
[$x, $y] = swap(1, 2); // $x=2, $y=1
?>

參考回傳

<?php
class Container {
    private array $data = [];
    public function &getRef(string $key) {
        return $this->data[$key];
    }
}
$c = new Container();
$c->getRef('name') = 'PHP'; // 直接修改內部屬性
echo $c->getRef('name'); // PHP
?>
慎用:破壞封裝,難以追蹤副作用。優先考慮 setter 方法。

參數傳參考 vs 回傳參考

語法用途範例
function(&$var)輸入參數參考,修改原變數func(&$x)
function() : &$var回傳參考,呼叫端可修改內部狀態&getRef()

型別宣告與嚴格模式

<?php
declare(strict_types=1);

function divide(float $a, float $b): float {
    if ($b === 0.0) throw new DivisionByZeroError();
    return $a / $b;
}

// 型別錯誤拋出 TypeError
divide(10, 2);   // float(5)
divide('10', 2); // TypeError (strict)
?>

Generator 回傳 (PHP 7+)

<?php
function rangeGen(int $start, int $end): Generator {
    for ($i = $start; $i <= $end; $i++) {
        yield $i;
    }
    return 'done'; // PHP 7+ 可用 getReturn()
}

$gen = rangeGen(1, 3);
foreach ($gen as $v) { echo $v; } // 123
echo $gen->getReturn(); // done
?>

最佳實踐

  • 單一職責:函數做一件事,回傳一種型別
  • 宣告回傳型別,啟用 strict_types=1
  • 多值回傳用關聯陣列或 stdClass,語意清晰
  • 避免參考回傳,改用不可變物件或 setter
  • 大量資料集用 Generator 惰性產生,節省記憶體
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved