注册模式不理解,怎么就获取到了db1了?
xnceo
2014-11-20
1 回答
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啦
举报
0/150
提交
取消