Zend的Registry機(jī)制的使用說(shuō)明
項(xiàng)目過(guò)程中有很多全局變量, 需要全局存儲(chǔ),是否是使用全局變量來(lái)進(jìn)行存儲(chǔ)?那就弱爆了。Zend使用Registry機(jī)制(注冊(cè)表)存儲(chǔ)對(duì)象和值,是一個(gè)存儲(chǔ)對(duì)象和值的容器。
Zend_Registry這個(gè)類就是做這個(gè)目的
代碼示例
Zend_Registry::set('config', $config);
Zend_Registry::get('config');
代碼分析
這兩個(gè)函數(shù)是最常用的兩個(gè)函數(shù)。我們來(lái)看一下這個(gè)類
class Zend_Registry extends ArrayObject
這個(gè)類繼承自ArrayObject
ArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable
ArrayObject是一個(gè)對(duì)象集合,相當(dāng)于其他語(yǔ)言的泛型集合的概念。
重點(diǎn)了解下void ArrayObject::offsetSet ( mixed $index , mixed $newval ), 這個(gè)函數(shù)就是hashtable中的設(shè)置key,value,只是key,value可以是任何類型的。
好了,回到Zend_Registry, 看看set做了些什么事情
set函數(shù)
public static function set($index, $value)
{
$instance = self::getInstance();
$instance->offsetSet($index, $value);
}
一個(gè)是實(shí)例化Register,另一個(gè)是調(diào)用offsetSet方法,將index和value設(shè)置進(jìn)去。
offset方法很好理解,但是為什么要使用getInstance方法呢?
這里建議大家好好看看,這個(gè)是結(jié)合類靜態(tài)方法的單例模式。
我們一般的單例模式寫成:
class A{
private $_instance;
public static function getInstance(){
...
}
protected function __construct(){
...
}
public function setVal(){
...
}
}
$a = A::getInstance();
$a->setVal();
這樣在調(diào)用之前就需要實(shí)例化一個(gè)類,雖然這個(gè)實(shí)例化實(shí)際上是單例,但感覺(jué)還是不舒服
這邊的register就做到了直接使用靜態(tài)方法調(diào)用
A::setVal();
大致的代碼思路我寫了個(gè)demo
class A{
private static $_instance;
public static function getInstance(){
if(self::_instance !==null){
return $this->_instance;
} else {
return new A();
}
}
public function __construct(){
}
public static function setV(){
$a = self::getInstance();
$a->setVal();
}
public function setVal(){
...
}
}
A::setV();
實(shí)際上就是直接把__construct()放開(kāi)成為public,然后實(shí)例化它
- Zend Framework教程之Zend_Registry對(duì)象用法分析
- Zend Framework入門教程之Zend_Config組件用法詳解
- Zend Framework過(guò)濾器Zend_Filter用法詳解
- Zend Framework實(shí)現(xiàn)自定義過(guò)濾器的方法
- Zend Framework校驗(yàn)器Zend_Validate用法詳解
- Zend Framework常用校驗(yàn)器詳解
- Zend Framework入門教程之Zend_Session會(huì)話操作詳解
- Zend Framework入門教程之Zend_Mail用法示例
- Zend Framework入門教程之Zend_Db數(shù)據(jù)庫(kù)操作詳解
- Zend Framework開(kāi)發(fā)入門經(jīng)典教程
- Zend Framework入門教程之Zend_Registry組件用法詳解
相關(guān)文章
laravel框架 laravel-admin上傳圖片到oss的方法
今天小編就為大家分享一篇laravel框架 laravel-admin上傳圖片到oss的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
解決在laravel中l(wèi)eftjoin帶條件查詢沒(méi)有返回右表為NULL的問(wèn)題
今天小編就為大家分享一篇解決在laravel中l(wèi)eftjoin帶條件查詢沒(méi)有返回右表為NULL的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
PHP利用超級(jí)全局變量$_GET來(lái)接收表單數(shù)據(jù)的實(shí)例
下面小編就為大家?guī)?lái)一篇PHP利用超級(jí)全局變量$_GET來(lái)接收表單數(shù)據(jù)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
Laravel框架實(shí)現(xiàn)利用監(jiān)聽(tīng)器進(jìn)行sql語(yǔ)句記錄功能
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)利用監(jiān)聽(tīng)器進(jìn)行sql語(yǔ)句記錄功能,結(jié)合實(shí)例形式分析了Laravel框架監(jiān)聽(tīng)器的創(chuàng)建、引入以及使用監(jiān)聽(tīng)器記錄sql語(yǔ)句的相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
談?wù)凱HP中substr和substring的正確用法及相關(guān)參數(shù)的介紹
這篇文章主要介紹了PHP中substr和substring的正確用法及相關(guān)參數(shù)介紹的相關(guān)資料,需要的朋友可以參考下2015-12-12

