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

PHP 返回引用與區域靜態變數深度解析

     編輯:PHP 綜合知識

一、函數返回引用

PHP 允許函數返回變數引用而非值拷貝,需在宣告與呼叫處雙雙使用 & 符號:

<?php
function &returns_reference() {
    $someref = 0;
    return $someref;
}

$newref = &returns_reference(); // $newref 現在是 $someref 的別名
$newref = 10; // 修改會影響原變數(若在函數作用域內)
?>

應用場景:大型資料結構避免拷貝、鏈式操作、單例模式實作等。

二、區域靜態變數

函數內使用 static 宣告的變數,生命週期延長至腳本結束,但作用域仍限於函數內部:

function counter() {
    static $count = 0; // 僅初始化一次
    $count++;
    echo $count . '<br>';
}
counter(); // 1
counter(); // 2
counter(); // 3

三、結合應用:單例註冊模式

經典的單例工廠實作,利用靜態變數快取實例、返回引用避免拷貝:

<?php
class A {}
class B {}

function &factory($className) {
    static $instances = []; // 區域靜態陣列,跨呼叫保持
    
    if (!isset($instances[$className])) {
        $instances[$className] = new $className(); // 延遲實例化
    }
    
    return $instances[$className]; // 返回引用
}

// 使用
$a1 = &factory('A');
$a2 = &factory('A');
$b1 = &factory('B');
$b2 = &factory('B');

echo ($a1 === $a2) ? 'A 為同一實例<br>' : '';
echo ($b1 === $b2) ? 'B 為同一實例<br>' : '';
echo ($a1 === $b1) ? 'A 與 B 相同' : 'A 與 B 不同'; // 不同
?>

核心優勢

  1. 記憶體效率:避免重複建立相同類別實例
  2. 全域存取:無需全域變數即可跨作用域獲取單例
  3. 延遲載入:首次呼叫時才實例化,節省啟動資源
  4. 引用返回:確保呼叫端操作的是同一物件實例

注意事項

  • PHP 7.0+ 建議改用靜態類別成員實作單例,語意更清晰
  • 引用濫用會增加程式碼複雜度,僅在必要時使用
  • 靜態變數在遞迴函數中共享同一儲存空間,需謹慎設計
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved