PHP 之模板模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 之模板模式相关的知识,希望对你有一定的参考价值。

我们可能会遇到这种情况,为了实现一些业务逻辑,我们会对同一个对象来回重建进行业务处理


比如说做试卷,老师除了一套试卷,学生们拿到试卷只有两个地方不一样,填写的答案和名字


这样的话,整体的算法骨架是一定的,你只需要固定出来一套题就可以,子类去修改其中一两部


应用情境:数据库中间层的抽象类


上代码

<?php

//模板设计模式创建了一个实施一组方法的抽象对象,子类通常将这个对象作为模板用于自己的设计。
//一般会用于数据库抽象类。
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=‘utf-8‘,$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();

}

//这是具体的某个数据库,比如mysql,oracle
class mysqliInit extends dbbaseInit{
	public $link_id;
	//重写模型中的连接类
	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) die(‘mysql connect error!‘);
		mysql_query($link_id,‘set names‘.$charset);
		if(!mysqli_select_db($link_id,$database)) die(‘database is not exist‘);

		return $link_id;
	}

	public function query($sql){
		return mysqli_query($this->link_id,$sql);
	}

	public function result($result,$num=1){
		return mysqli_result($result,$num);
	}

	public function fetch_assoc($result){
		return mysqli_fetch_assoc($result);
	}

	public function fetch_fields($result){
		return mysqli_num_fields($result);
	}

	public function free_result($result){
		return mysqli_free_result($result);
	}

	public function insert_id(){
		return mysqli_insert_id($this->link_id);
	}

	public function affected_rows() { 
        return mysqli_affected_rows($this->link_id); 
    }

    public function close(){
    	if($this->link_id!==null) $mysqli_close($this->link_id);
    	$this->link_id = null;
    	return true;
    }

    public function error(){
    	return mysqli_error($this->link_id);
    }
}
?>



有点累了,设计模式常用的先学到这里,后续的以后再说,


愿法界众生,皆得安乐

本文出自 “一站式解决方案” 博客,请务必保留此出处http://10725691.blog.51cto.com/10715691/1954849

以上是关于PHP 之模板模式的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 中的通用代码片段或模板

Android:带有片段的模板模式

PHP MODx - 获取模板变量片段

php 在没有模板的插件中加载文本片段

微信小程序第七天WXML语法之模板用法

微信小程序第七天WXML语法之模板用法