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

Zend Framework Zend_Registry 註冊表完整用法指南

     編輯:PHP 相關知識

Zend Framework Zend_Registry 註冊表完整用法指南

Zend_Registry 提供應用程式層級的全域物件儲存機制,類似「物件倉庫」,讓你在專案任何位置存取共享資源(如資料庫連線、設定物件、View 實例等)。本文詳細說明靜態用法、陣列存取、物件屬性存取、迭代、擴充與實例管理。

基本靜態操作

<?php
// 設定值
Zend_Registry::set('db', $dbAdapter);
Zend_Registry::set('config', $configArray);

// 取得值
$db = Zend_Registry::get('db');
$config = Zend_Registry::get('config');

// 檢查是否存在
if (Zend_Registry::isRegistered('db')) { /* ... */ }
?>

陣列式存取(ArrayAccess)

取得靜態實例後可像陣列操作:

<?php
$registry = Zend_Registry::getInstance();
$registry['cache'] = $cacheObj;
var_dump($registry['cache']);
unset($registry['cache']);
?>

物件屬性式存取(ArrayObject::ARRAY_AS_PROPS)

需在 Bootstrap 階段初始化:

<?php
$registry = new Zend_Registry([], ArrayObject::ARRAY_AS_PROPS);
Zend_Registry::setInstance($registry);

$registry->db = $dbAdapter;
echo $registry->db; // 直接存取屬性
?>
注意:某些 PHP 版本搭配 ARRAY_AS_PROPS 可能有 Bug,生產環境請充分測試。

迭代 Registry 內容

<?php
$registry = Zend_Registry::getInstance();
foreach ($registry as $index => $value) {
    echo "Registry index $index contains:\n";
    var_dump($value);
}
?>

建立自訂 Registry 類別

<?php
class My_Registry extends Zend_Registry {
    public function getOrCreate($key, callable $factory) {
        if (!$this->offsetExists($key)) {
            $this->offsetSet($key, $factory());
        }
        return $this->offsetGet($key);
    }
}

// 於 Bootstrap 設定
Zend_Registry::setClassName('My_Registry');
Zend_Registry::set('service', $serviceObj);
?>
若靜態實例已初始化,再呼叫 setClassName() 會拋出例外,需先呼叫 _unsetInstance() 清除。

刪除靜態實例

<?php
Zend_Registry::_unsetInstance(); // 所有資料將遺失,不可恢復
// 之後可重新 setClassName() 或 setInstance()
?>

實際應用場景

  • 資料庫連線物件(Zend_Db_Adapter)跨模組共用。
  • 設定陣列(Zend_Config)集中管理。
  • View 實例(Zend_View)於 Controller 與 Helper 間傳遞。
  • 快取物件(Zend_Cache)單例模式替代方案。

延伸閱讀

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