原创作者: vb2005xu
阅读:1140次
评论:3条
更新时间:2011-05-26
先看代码:
class orm_factory { /** * 数据库操作对象 * * @var orm_driver */ private $_driver = null ; /** * 表操作对象 * * @var orm_table_operator */ private $_table_operator = null ; private static $_valid_dsn_set = array(); private function __init_params(orm_driver $driver,orm_table_operator $table_operator){ $this->_driver = $driver ;echo "111111111111" ; $this->_table_operator = $table_operator ; } function get_driver(){ return $this->_driver ; } /** * 工厂实例对象 * @param string $dsn * @return orm_factory */ static function instance($dsn){ static $inst = null ; if (!$inst) $inst = new orm_factory() ; if (!isset(self::$_valid_dsn_set[$dsn])){ try { $driver = new orm_driver($dsn) ; $driver->open_connect(); $table_operator = new orm_table_operator($driver); self::$_valid_dsn_set[$dsn] = array( '__driver__' => $driver , '__operator__' => $table_operator ); } catch (orm_driver_exception $ex){ throw new orm_factory_exception($ex->getMessage()); } } $inst->__init_params(self::$_valid_dsn_set[$dsn]['__driver__'],self::$_valid_dsn_set[$dsn]['__operator__']); return $inst ; } /** * 返回表操作器对象 * @param string $table * @return orm_table_operator */ function get_operator($table){ // 此处 可能触发 orm_table_exception $this->_table_operator->register_table($table) ; return $this->_table_operator; } }
加亮处 应该是有问题的
$inst->__init_params
此处竟然能从对象实例中访问私有方法,太不可思议了.... 难不成是因为在一个类中的代码都是可以调用的,而不是以 对象 来单独划分的么?
3 楼 sesen2010 2010-09-11 11:02
2 楼 vb2005xu 2010-07-19 10:23
1 楼 化蝶自在飞 2010-07-16 21:48