注冊模式不理解,怎么就獲取到了db1了?
xnceo
2014-11-20
1 回答
舉報
0/150
提交
取消
2014-11-20
舉報
2019-02-13
class?Register { ????protected?static?$objects; ????//?將一個對象注冊到一個全局樹上 ????static?function?set($alias,$object) ????{ ????????self::$objects[$alias]?=?$object; ????} ????static?function?get($name) ????{ ????????return?self::$objects[$name]; ????} ????function?_unset($alias) ????{ ????????unset(self::$objects[$alias]); ????} }在注冊器類中 $Object 是靜態屬性對吧,因此其生命周期等同全局變量的生命周期,程序結束后才會被銷毀。因此在你需要的地方這樣調用
$db?=?DataBase::getInstance();?//?DataBse對象 Register::set('db1',$db);?//?把對象$db注冊到全局樹上它的別名為db1如果你是跟著Rango寫的使用的時候記得先調用一下工廠方法createDatabase()去獲取db對象,因為老師的注冊方法寫在工廠方法里的
namespace?IMooc; class?Factory { ????static?function?createDatabase() ????{ ????????$db?=?DataBase::getInstance(); ????????Register::set('db1',$db); ????????return?$db; ????} }你在入口文件index.php中,這樣來調用:
//?注冊樹模式?注意一般注冊對象會放在項目初始化的位置 $db?=?IMooc\Factory::createDatabase(); $db1?=?\IMooc\Register::get('db1'); var_dump($db1);打印結果就不會是NULL啦