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

PHP 函數前加 & 符號詳解:引用返回機制與實戰應用

     編輯:PHP 相關知識

語法含義

function &test() 表示該函數返回引用而非返回值。調用時必須使用 $a =& test() 才能獲得引用綁定。

核心代碼演示

<?php
function &test() {
    static $b = 0;
    $b = $b + 1;
    echo $b . '<br/>';
    return $b;
}

$a = test();  // 輸出 1,普通調用,返回值賦值
$a = 5;
$a = test();  // 輸出 2,$b 未受 $a=5 影響

$a =& test(); // 輸出 3,引用返回,$a 與 $b 綁定同一內存地址
$a = 5;
$a = test();  // 輸出 6!$b 被修改為 5,下次遞增為 6
?>

關鍵區別

調用方式行為影響靜態變量
$a = test()值傳遞,複製返回值否
$a =& test()引用綁定,共享內存地址是

實際應用場景

1. 鏈式操作/流式接口

class QueryBuilder {
    private $sql = '';
    
    public function &select($fields) {
        $this->sql .= "SELECT $fields";
        return $this; // 返回 $this 引用
    }
    
    public function &where($condition) {
        $this->sql .= " WHERE $condition";
        return $this;
    }
}

$qb = new QueryBuilder();
$qb->select('*')->where('id=1'); // 鏈式調用

2. 大數據結構避免複製

function &getLargeConfig() {
    static $config = null;
    if ($config === null) {
        $config = loadHugeConfigArray(); // 僅加載一次
    }
    return $config; // 返回引用,避免數組複製
}

$cfg =& getLargeConfig();
$cfg['cache'] = true; // 直接修改原始配置

注意事項

  • PHP 5+ 對象默認引用傳遞,對象不需要 & 也能實現類似效果
  • 僅在需要修改函數內部靜態變量/全局資源時使用
  • 返回引用的函數不能返回臨時表達式(如 return $a + $b)
  • & 不能用於 void 函數或構造函數

常見誤區

誤區:以為 $a = test() 也能獲得引用。
事實:PHP 規定必須雙方都有 &(函數定義與調用處)才建立引用綁定。

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