Heim >php教程 >php手册 >PHP设计模式系列

PHP设计模式系列

WBOY
WBOYOriginal
2016-06-13 10:50:571184Durchsuche

模板模式
模板设计模式创建了一个实施一组方法的抽象对象,子类通常将这个对象作为模板用于自己的设计。
 
设计场景
一般会用于数据库抽象类。
代码设计:
[php] 
if (!defined('IS_INITPHP')) exit('Access Denied!'); 
/*********************************************************************************
 * InitPHP 2.0 国产PHP开发框架  Dao-dbbase Driver DB基类
 *-------------------------------------------------------------------------------
 * 版权所有: CopyRight By initphp.com
 * 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己
 *-------------------------------------------------------------------------------
 * $Author:zhuli
 * $Dtime:2011-10-09 
***********************************************************************************/ 
abstract class dbbaseInit{ 
 
    /**
     * 抽象数据库链接
     * @param  string $host sql服务器
     * @param  string $user 数据库用户名
     * @param  string $password 数据库登录密码
     * @param  string $database 数据库
     * @param  string $charset 编码
     * @param  string $pconnect 是否持久链接
     */ 
    abstract protected function connect($host, $user, $password, $database, $charset = 'utf8', $pconnect = 0); 
     
    /**
     * 抽象数据库执行语句
     * @param  string $sql SQL语句
     * @return obj
     */ 
    abstract protected function query($sql); 
     
    /**
     * 抽象数据库-结果集中的行数
     * @param $result 结果集
     * @return array
     */ 
    abstract protected function result($result, $num=1); 
     
    /**
     * 抽象数据库-从结果集中取得一行作为关联数组
     * @param $result 结果集
     * @return array
     */ 
    abstract protected function fetch_assoc($result); 
     
    /**
     * 抽象数据库-从结果集中取得列信息并作为对象返回
     * @param  $result 结果集
     * @return array
     */ 
    abstract protected function fetch_fields($result); 
     
    /**
     * 抽象数据库-前一次操作影响的记录数
     * @return int
     */ 
    abstract protected function affected_rows(); 
     
    /**
     * 抽象数据库-结果集中的行数
     * @param $result 结果集
     * @return int
     */ 
    abstract protected function num_rows($result); 
     
    /**
     * 抽象数据库-结果集中的字段数量
     * @param $result 结果集
     * @return int
     */ 
    abstract protected function num_fields($result); 
     
    /**
     * 抽象数据库-获取上一INSERT的ID值
     * @return Int
     */ 
    abstract protected function insert_id(); 
     
    /**
     * 抽象数据库-释放结果内存
     * @param obj $result 需要释放的对象
     */ 
    abstract protected function free_result($result); 
     
    /**
     * 抽象数据库链接关闭
     * @param  string $sql SQL语句
     * @return obj
     */ 
    abstract protected function close(); 
     
    /**
     * 错误信息
     * @return string
     */ 
    abstract protected function error(); 

 
 
if (!defined('IS_INITPHP')) exit('Access Denied!'); 
/*********************************************************************************
 * InitPHP 2.0 国产PHP开发框架  Dao-mysqli 基类
 *-------------------------------------------------------------------------------
 * 版权所有: CopyRight By initphp.com
 * 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己
 *-------------------------------------------------------------------------------
 * $Author:zhuli
 * $Dtime:2011-10-09 
***********************************************************************************/ 
class mysqliInit extends dbbaseInit{ 
     
    public $link_id; //链接对象  
      
    /**
     * MYSQL连接器
     * @param  string $host sql服务器
     * @param  string $user 数据库用户名
     * @param  string $password 数据库登录密码
     * @param  string $database 数据库
     * @param  string $charset 编码
     * @param  string $pconnect 是否持久链接
     * @return obj
     */ 
    public function connect($host, $user, $password, $database, $charset = 'utf8', $pconnect = 0) { 
        $link_id = ($pconnect == 0) ? mysqli_connect($host, $user, $password) : mysqli_pconnect($host, $user, $password); 
        if (!$link_id) InitPHP::initError('mysql connect error!'); 
        mysqli_query($link_id, 'SET NAMES ' . $charset); 
        if (!mysqli_select_db($link_id, $database)) InitPHP::initError('database is not exist!'); 
        return $link_id; 
    } 
     
    /**
     * SQL执行器
     * @param  string $sql SQL语句
     * @return obj
     */ 
    public function query($sql) { 
        return mysqli_query($this->link_id, $sql); 
    } 
     
    /**
     * 结果集中的行数
     * @param $result 结果集
     * @return array
     */ 
    public function result($result, $num=1) { 
        return mysqli_result($result, $num); 
    } 
         
    /**
     * 从结果集中取得一行作为关联数组
     * @param $result 结果集
     * @return array
     */ 
    public function fetch_assoc($result) { 
        return mysqli_fetch_assoc($result); 
    } 
     
    /**
     * 从结果集中取得列信息并作为对象返回
     * @param  $result 结果集
     * @return array
     */ 
    public function fetch_fields($result) { 
        return mysqli_fetch_field($result); 
    } 
     
    /**
     * 结果集中的行数
     * @param $result 结果集
     * @return int
     */ 
    public function num_rows($result) { 
        return mysqli_num_rows($result); 
    } 
     
    /**
     * 结果集中的字段数量
     * @param $result 结果集
     * @return int
     */ 
    public function num_fields($result) { 
        return mysqli_num_fields($result); 
    } 
     
    /**
     * 释放结果内存
     * @param obj $result 需要释放的对象
     */ 
    public function free_result($result) { 
        return mysqli_free_result($result); 
    } 
     
    /**
     * 获取上一INSERT的ID值
     * @return Int
     */ 
    public function insert_id() { 
        return mysqli_insert_id($this->link_id); 
    } 
     
    /**
     * 前一次操作影响的记录数
     * @return int
     */ 
    public function affected_rows() { 
        return mysqli_affected_rows($this->link_id); 
    } 
     
    /**
     * 关闭连接
     * @return bool
     */ 
    public function close() { 
        if ($this->link_id !== NULL) @mysqli_close($this->link_id); 
        $this->link_id = NULL; 
        return true; 
    } 
     
    /**
     * 错误信息
     * @return string
     */ 
    public function error() { 
        return mysqli_error($this->link_id); 
    } 
     

作者:initphp

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn