搜尋
首頁php教程PHP开发Zend Framework教程之Zend_Registry物件用法分析

本文實例講述了Zend Framework教程之Zend_Registry物件用法。分享給大家供大家參考,具體如下:

使用物件註冊表(Registry)

物件註冊表(或稱物件倉庫)是一個用於在整個應用程式空間(application space)內儲存物件和值的容器。透過把物件儲存在其中,我們可以在整個專案的任何地方使用同一個物件。這種機制相當於一種全域儲存。

我們可以透過Zend_Registry類別的靜態方法來使用對象註冊表,另外,由於該類別是一個數組對象,你可以使用數組形式來存取其中的類別方法。

1. 設定Registry中的值

要將一項內容儲存到登錄中,我們可以使用靜態方法 set()。

例 1. set() 使用範例:

Zend_Registry::set('index', $value);

   

$value可以是一個物件、陣列或標量。你可以再次使用set()來為登錄中已有的值設定一個新值。

index參數可以是一個標量,即字串或整數,就像使用數組一樣,類似於數組的索引/鍵名。

2. 取得Registry中的值

可以使用 get()方法來取得Registry中某項內容的值。

例 2.  get() 方法範例:

$value = Zend_Registry::get('index');

   

getInstance()傳回靜態registry物件。
registry物件是可迭代的(iterable)。

例3. 迭代一個registry物件:

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

   

3. 創建一個Registry物件

除了可以使用靜態方法來存取Registry物件之外,您可以直接使用普通的實例一樣。

如果透過靜態方法來存取registry物件的實例,它很方便進行靜態存儲,你可以在程式中的任何地方存取它。

如果使用傳統的new 方法來建立registry的實例,則你可以使用數組一樣的方式來初始化registry中的內容。

例4. 建立一個registry物件

$registry = new Zend_Registry(array('index' => $value));

   

在建立這個物件實例之後,你可以使用陣列物件方法來使用它,或者你可以把這個物件實例透過靜態方法setInstance()設為靜態物件實例。

例 5. Example of initializing the static registry

   
$registry = new Zend_Registry(array('index' => $value));
Zend_Registry::setInstance($registry);

   

如果靜態的登錄物件已經被初始化過,則setInstance()方法會拋出一個例外。

4. 像存取陣列一樣存取Registry物件

如果你要一次存取或設定多個值,你會發現使用陣列方式是很方便的。

例 6. array 方式存取範例:

$registry = Zend_Registry::getInstance();
$registry['index'] = $value;
var_dump( $registry['index'] );

   

5. 物件方式存取Registry

你會發現使用物件導向風格來存取registry也是方便的,物件中的物件名稱作為索引。 要這樣做,你需要使用ArrayObject::ARRAY_AS_PROPS選項來建立registry對象,並初始化靜態實例。你要在靜態的registry被第一次造訪之前就完成這個工作。小心使用這個選項,因為某些版本的PHP在使用這個選項時會有bug。

例 7. 物件形式的存取:

//在你的bootstrap代码中:
$registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS)
Zend_Registry::setInstance($registry);
$registry->tree = 'apple';
.
.
.
//在程序的任何其它地方:
$registry = Zend_Registry::getInstance();
echo $registry->tree; // echo's "apple"
$registry->index = $value;
var_dump($registry->index);

   

6. 查詢一個索引是否存在

可以使用靜態方法isRegistered()來查詢是否某個特定的索引是否存在

可以使用靜態方法isRegistered()來查詢是否某個特定的索引是否存在了對應的值。

例8. isRegistered() 例:

if (Zend_Registry::isRegistered($index)) {
  $value = Zend_Registry::get($index);
}

   

要確定一個數組物件中的某個特定索引的值是否設定,可以使用isset()函數,就像在普通的數組中那樣使用。

例 9. isset() 範例:

$registry = Zend_Registry::getInstance();
// using array-access syntax
if (isset($registry['index'])) {
  var_dump( $registry['index'] );
}
// using object-access syntax, if enabled
if (isset($registry->index)) {
  var_dump( $registry->index );
}

   

7. 擴充Registry物件

靜態registry物件是類別Zend_Registry的一個實例。如果你想為它增加功能,你可以繼承Zend_Registry類,然後指定使用這個類別來存取物件註冊表。你可以使用靜態方法setClassName()來指定使用這個類別。注意這個類別一定要是Zend_Registry的子類別。

例 10. 指定靜態登錄的類別名稱:

Zend_Registry::setClassName('My_Registry');
Zend_Registry::set('index', $value);

   

如果你在registry已經被造訪過後嘗試設定該類別名,則registry拋出一個異常。建議你在boostrap程式碼(即index.php)中設定該類別名稱。

8. 刪除靜態註冊表

儘管這不是必需的,你可以使用_unsetInstance()方法來刪除registry的靜態實例。

[注意] 資料遺失的風險

在使用_unsetInstance()的時候,靜態登錄中的所有資料都會遺失且無法復原。

有時你可能需要_unsetInstance()這個方法。例如你想在已經初始化過registry物件之後,再使用setInstance()或 setClassName(),那麼你可以用_unsetInstance()先把靜態實例刪除了,然後才能使用那些方法。

例 11.  _unsetInstance() 例:

Zend_Registry::set('index', $value);
Zend_Registry::_unsetInstance();
// 改变我们要使用的类
Zend_Registry::setClassName('My_Registry');
Zend_Registry::set('index', $value);

   

希望本文所述對大家基於Zend Framework框架的PHP程式設計有所幫助。

🎜更多Zend Framework教程之Zend_Registry物件用法分析相關文章請關注PHP中文網! 🎜
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器