看了下STBlog的system/database文件夹下面的文件 总是感觉自己没有完全弄明白,就是感觉没有找到一条清晰的线,大家看下我说的是不是正确。
好像这个数据库的入口 是DB.php文件里面function &DB($params = '', $active_record_override = FALSE) 函数,该函数先是判断数据库的连接方式(是否为DSN字符串连接,这里还没弄明白,不知道DSN连接方式是什么东东),如果不是则引入了数据库的配置文件(application/config/database.php),然后引入database/DB_driver.php(CI_DB_driver类)文件,接下来又根据变量$active_record决定是否载入database/DB_active_rec.php(Active Record 类)文件,并决定 CI_DB类 是继承具体哪个类CI_DB_active_record { } or CI_DB_driver { } ,然后接着又引入drivers/mysql/mysql_driver.php(CI_DB_mysql_driver类)文件,以上这些类只是引入进来 并没有对类进行实例化操作,接下来 $DB =& instantiate_class(new $db[default]); 实例化了这个类CI_DB_mysql_driver。在以上的引入的文件中存在如下关系:CI_DB_mysql_driver 继承 CI_DB 类, CI_DB 又继承 CI_DB_active_record 类,CI_DB_active_record 又继承 CI_DB_driver类。然后数据库对象调用自动初始化数据库函数$DB->initialize();,该函数完成了 连接数据库,选择数据库,和设置数据库字符集的操作,在设置字符集的时候调用函数db_set_charset(该函数在DB_driver.php中存在,在mysql_driver.php中又重写了这个函数)。最后返回数据库对象 $DB.至此数据库方面的连接等是否已经完成了呢 就是在以后的程序里面是不是就直接用 $DB->函数名(参数)就是能对数据库进行所有的操作了呢 但是这个database文件夹下还有好几个文件没有涉及到呢。我看完后自己能够整理出来的就是这些 总是感觉有些不清晰 当然看完每个文件里面的函数具体怎么执行还是有很大帮助的 希望大家给指点下 3Q
|