纸上得来终觉浅,绝知此事要躬行。

 

PHP 数据持久化抽象类

<?php
   abstract class rdbmsBase {
    /**
     * $_connection_resource用于记录连接句柄;
     *
     * @var resource;
     */
    protected $_connection_resource;
    
    /**
     */
    protected $_connection_type;
    
    /**
     * instance,记录类的实例对象,防止重复连接databases实例;
     *
     * @var array;
     */
    protected static $instance;
    
    /**
     * 函数__construct为类的构造函数;
     *
     * @param
     *            database_host string [必选] 数据库的地址;
     * @param
     *            database_user string [必须] 数据库的 用户名;
     * @param
     *            database_password string [必须] 数据库的密码;
     * @param
     *            pconnect bool [可选] 连接的类型是否长链接;
     * @param
     *            database_name string [可选] 默认数据库名;
     * @param
     *            driver_options array [可选] 连接数据库的选项;
     *            
     * @return void;
     *
     */
    public abstract function __construct($database_host, $database_user, $database_password, $pconnect = false, $database_name = 'test', array $driver_options = array());
    
    /**
     * 函数transactionBegin标记一个事务起始点;
     *
     * @param
     *            void;
     *            
     * @return bool;
     */
    public abstract function transactionBegin();
    
    /**
     * 函数transactionCommit提交一个事务;
     *
     * @param
     *            void;
     *            
     * @return bool;
     */
    public abstract function transactionCommit();
    
    /**
     * 函数transactionRollBack回滚一个事务;
     *
     * @param
     *            void;
     *            
     * @return bool;
     */
    public abstract function transactionRollBack();
    
    /**
     * 函数transactionInside判断当前是否在一个事务里面;
     *
     * @param
     *            void;
     *            
     * @return bool;
     */
    public abstract function transactionInside();
    
    /**
     * 函数exec执行一条原生的写入sql;
     *
     * @param
     *            sql string 原生的标准sql,表名使用{databaseName.table}形式;
     *            
     * @return bool;
     *
     */
    public abstract function exec($sql);
    
    /**
     * 函数execExecute通过预处理方式执行一条写入sql;
     *
     * @param
     *            sql string 原生的标准sql,表名使用{databaseName.table}形式;
     * @param
     *            parameters array 预处理sql参数;
     *            
     * @return bool;
     *
     */
    public abstract function execExecute($sql, array $parameters = array());
    
    /**
     * 函数queryReturnPDOStatement执行一条原生的读操作sql,并返回查询结果集;
     *
     * @param
     *            sql string 原生的标准sql,表名使用{databaseName.table}形式;
     *            
     * @return statement,成功返回statement,失败返回false;
     *
     */
    public abstract function queryReturnStatement($sql);
    
    /**
     * 函数queryExecuteReturnPDOStatement通过预处理方式执行一条读取sql,并且返回查询结果集;
     *
     * @param
     *            sql            string        原生的标准sql,表名使用{databaseName.table}形式;
     * @param
     *            parameters    array        预处理sql参数;
     *            
     * @return statement,成功返回statement,失败返回false;
     *
     */
    public abstract function queryExecuteReturnStatement($sql, array $parameters = array());
    
    /**
     * 函数queryExecute通过预处理方式执行一条读取sql,并且返回查询结果数组;
     *
     * @param
     *            sql string 原生的标准sql,表名使用{databaseName.table}形式;
     * @param
     *            parameters array 预处理sql参数;
     * @param
     *            fetchStyle int 返回结果的类型,默认是@assoc:返回索引数组类型的结果;
     *            
     * @return array,成功返回一个数组,失败返回false;
     *
     */
    public abstract function queryExecute($sql, $parameters = array(), $fetch_style = 'assoc');
    
    /**
     * 函数queryExecuteOne通过预处理方式执行一条只返回单条数据的读取sql,并且返回查询结果的一数组组;
     *
     * @param
     *            sql    string 原生的标准sql,表名使用{databaseName.table}形式;
     * @param
     *            parameters    array 预处理sql参数;
     * @param
     *            fetchStyle    int 返回结果的类型,默认是@assoc返回数组类型的结果;
     *            
     * @return array,成功返回一个数组,失败返回false;
     *
     */
    public abstract function queryExecuteOne($sql, $parameters = array(), $fetch_style = 'assoc');
    
    /**
     * 函数query执行一条读取sql,并且返回查询结果数组;
     *
     * @param
     *            sql string 原生的标准sql,表名使用{databaseName.table}形式;
     * @param
     *            fetchStyle int 返回结果的类型,默认是@assoc:返回索引数组类型的结果;
     *            
     * @return array,成功返回一个数组,失败返回false;
     *
     */
    public abstract function query($sql, $fetch_style = 'assoc');
    
    /**
     * 函数queryOne执行一条只返回单条数据的读取sql,并且返回查询结果的一数组组;
     *
     * @param
     *            sql    string 原生的标准sql,表名使用{databaseName.table}形式;
     * @param
     *            fetchStyle    int 返回结果的类型,默认是@assoc:返回数组类型的结果;
     *            
     * @return array,成功返回一个数组,失败返回false;
     *
     */
    public abstract function queryOne($sql, $fetch_style = 'assoc');
    
    /**
     * 函数lastInsertId获取最后一条数据的插入递增ID;
     *
     * @param
     *            void;
     *            
     * @return int,成功返回最后一条预处理sql插入行的递增ID,失败返回false;
     *
     */
    public abstract function lastInsertId();
    
    /**
     * 函数lastRowCount返回最后一条sql的影响行数,当最后一条sql是使用预处理的方式执行的;
     *
     * @return int,成功返回int,当最后一条执行语句不为写入操作和操作失败返回false;
     */
    public abstract function lastRowCount();
    
    /**
     * 函数__destruct,类的虚构函数;
     *
     * @param
     *            void;
     *            
     * @return void;
     *
     */
    public abstract function __destruct();
    
    /**
     * 函数destruct为类的析构函数;
     *
     * @param
     *            void
     *            
     * @return void;
     *
     */
    public static function destruct() {
        self::$instance = null;
    }
    
    /**
     * 函数getError,得到最后一条执行sql的错误信息;
     *
     * @param
     *            void;
     *            
     * @return false | array;
     *        
     */
    public abstract function lastError();
    
    /**
     * 函数fetch,取出查询结果的当前一条数据,并且把游标下移一位;
     *
     * @param
     *            PDOStatement object [必须] 查询结果集;
     * @param
     *            isClose bool [可选] 是否关闭游标,默认@false:不关闭游标;
     * @param
     *            fetchStyle    int 返回结果的类型,默认是PDO::FETCH_ASSOC返回数组类型的结果;
     *            
     * @return false | array;
     *        
     */
    public static function fetch($statement, $isClose = false, $fetchStyle) {
    }
    
    /**
     * 函数fetchAll,取出查询结果的所有数据,并且关闭游标;
     *
     * @param
     *            PDOStatement object [必须] 查询结果集;
     * @param
     *            fetchStyle    int 返回结果的类型,默认是PDO::FETCH_ASSOC返回数组类型的结果;
     *            
     * @return false | array;
     *        
     */
    public static function fetchAll($statement, $fetchStyle) {
    }
    
    /**
     * 函数single,实现单例模式;
     *
     * @param
     *            databasesConfig array [必选] 数据库的配置;
     * @param
     *            type enum('master','slaves') [可选] 连接类型默认为@master:主数据库;
     * @param
     *            driverOptions array [可选] 连接数据库的选项,默认为空;
     *            
     * @return 类的对象;
     *
     */
    public static function singleton($database_host, $database_user, $database_password, $pconnect = false, $database_name = 'test', array $driver_options = array()) {
        $key = md5 ( json_encode ( array (
                $database_host,
                $database_user,
                $database_password,
                $pconnect,
                $driver_options 
        ) ) );
        if (! isset ( self::$instance [$key] )) {
            $class_name = get_called_class ();
            self::$instance [$key] = new $class_name ( $database_host, $database_user, $database_password, $pconnect, $database_name, $driver_options );
        }
        return self::$instance [$key];
    }
}
?>

 

posted on 2013-09-06 18:47  JRoger  阅读(513)  评论(0编辑  收藏  举报

导航