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

Zend Framework Registry 註冊表完整使用指南:物件模式與靜態調用雙軌並行

     編輯:PHP 相關知識

Zend Framework 1.x 的 Zend_Registry 提供進程級的全域資料儲存,支援陣列初始化、物件屬性存取、靜態 set/get 等多種用法。本文通過完整代碼示例,系統梳理其核心用法與最佳實踐。

快速上手:陣列初始化與陣列式存取

<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass("Zend_Registry");

$config = [
    'host'     => '127.0.0.1',
    'username' => 'root',
    'password' => '111',
    'dbname'   => 'test'
];

// 建構子注入陣列
$registry = new Zend_Registry($config);

echo "主機名:{$registry['host']}<br>";
echo "用戶名:{$registry['username']}<br>";
echo "密碼:{$registry['password']}<br>";
echo "資料庫:{$registry['dbname']}<br>";
echo "<hr>";

// 靜態 set/get 也可操作同一儲存空間
Zend_Registry::set('table_name', 'sanguo');
echo Zend_Registry::get('table_name'); // 輸出 sanguo

物件模式:實例化 → 設為單例 → 屬性存取

<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass("Zend_Registry");

// 1. 實例化
$reg = new Zend_Registry();
// 2. 註冊為全域單例
Zend_Registry::setInstance($reg);

// 3. 以物件屬性寫入
$reg->name = '張三';
$reg->sex  = '男';
$reg->age  = '18';

// 4. 任意處透過 getInstance() 讀取
$reg = Zend_Registry::getInstance();
echo "姓名為:{$reg->name}<br>";
echo "性別為:{$reg->sex}<br>";
echo "年齡為:{$reg->age}<br>";

進階:跨類別共享資料

<?php
$arr = ['姓名' => '張三', '年齡' => '18', '愛好' => '上網'];
Zend_Registry::set('My', $arr);

class Person {
    public function My() {
        $data = Zend_Registry::get('My');
        echo "我的姓名是:{$data['姓名']}<br>";
        echo "我的年齡是:{$data['年齡']}<br>";
        echo "我的愛好是:{$data['愛好']}<br>";
    }
}

$p = new Person();
$p->My();

核心概念速查表

方法用途備註
new Zend_Registry($array)建構子批量寫入僅在首次建立時有效
Zend_Registry::setInstance($obj)註冊單例物件全域唯一,後續 getInstance() 返回此物件
Zend_Registry::getInstance()取得單例物件物件模式專用
Zend_Registry::set($key, $val)靜態寫入鍵值對,支援任意型別
Zend_Registry::get($key)靜態讀取不存在返回 null
$registry[$key]陣列式讀寫物件實現 ArrayAccess 介面

避坑指南

  • 單例唯一性:全進程只能 setInstance 一次,重複呼叫會拋出異常。
  • 型別安全:Registry 不做型別檢查,讀取後建議驗證。
  • 生命週期:資料隨 PHP 進程結束銷毀,不適合持久化需求。
  • 命名空間衝突:大型專案建議加前綴(如 config.db.host)避免鍵名衝突。

善用 Zend_Registry 可減少全域變數汙染,統一管理配置、服務實例等共享資源,是 ZF1 專案架構中的基石組件。

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