模板模式 php,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);
}
}
?>
有点累了,设计模式常用的先学到这里,后续的以后再说,
愿法界众生,皆得安乐
模板模式 php,PHP 之模板模式相关推荐
- 模板模式详解、模板模式怎么用、模板模式模板代码
模板模式详解.模板模式怎么用.模板模式模板代码 文章目录 模板模式详解.模板模式怎么用.模板模式模板代码 @[toc] 模板模式定义 使用场景 优点 代码实操 模板模式定义 在模板模式(Templat ...
- 3.模板模式_1:什么是模板模式???什么情况适合用模板模式???模板模式如何实现???
3.模板模式_1:什么是模板模式???什么情况适合用模板模式???模板模式如何实现??? 学习:第7遍 1.什么是模板模式??? Template 定义一个抽象类,将部分逻辑以具体方法的形式实现,然后 ...
- java解耦的模板模式_Java 设计模式(9) —— 模板模式
一.模板模式 封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现.模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤. 模板模式 二.示例 泡咖啡与泡茶: 泡咖啡的步骤: 水 ...
- 菜单黑暗模式UI动画素材模板
黑暗模式应用设计原则 创建应用程序的黑暗模式时,不可否认,我们要遵循一些规则,否则用户体验会大大恶化. · 遵循平台准则 这是第一个,也许也是最重要的提示.Google和Apple都给出了非常完善的规 ...
- C++模板:类模板和类模板的友元【C++模板】(57)
类模板 Stack 类 类模板 格式 类模板的应用 类模板的多文件实现 类模板的友元 类模板中的友元在.h 类模板中的友元在.cpp hpp STL入门 类模板 Stack 类 我们先给出我们之前实现 ...
- java模板方法模式_Java中的模板方法模式
java模板方法模式 模板方法模式是一种行为模式,建议在超类中更一般地定义算法. 该算法是在称为模板方法的方法中定义的. 子类仅定义更具体的算法步骤的实现. 使用这种设计模式的好处是,算法后面的任何更 ...
- mysql+php+模板+条目_PHP.MVC的模板标签系统(四)
页面布局 在这个单元中我们将看到如何使用模板标签系统构造一个标准的模板页面.这个例子我们使用了一个简单的HTML页面布局,请看下图: 这个页面有多个标准单元组成,就像页面设计者和开发者熟悉的那样.这个 ...
- php模板引擎如何实现,PHP模板引擎如何实现
假设使用标签形式作为模板语法 在解析环节我想到两种实现方式 1. 利用正则获取标签内容,然后将标签进行规则性的替换并使用eval进行解析,解析完成后再用正则进行替换 2. 利用正则获取标签内容,然后将 ...
- java短信模板变量参数赋值_JIEQI CMS模板制作必读(JIEQI CMS模板 - 2.赋值变量形式)...
11.JIEQI CMS模板 - 2.赋值变量形式 二.赋值变量形式 1.任何变量必须是 $ 符号开头的一个只能包含英文数字和下划线的字符串,如 {?$my_var?}. 例子: ---------- ...
- 小旋风蜘蛛池模板-免费小旋风蜘蛛池模板-免费小旋风蜘蛛池采集无需规则
小旋风蜘蛛池模板,市面上有很多免费的小旋风蜘蛛池模板,但是由于免费导致大量地重复的模板,为了更好的做好小旋风蜘蛛池所以会自己开发模板.小旋风模板怎么开发?以下会为大家分享小旋风模板制作标签,除了小旋风 ...
最新文章
- WC2018 CCF程序设计教学比赛记事
- java jtabbedpane 关闭_JTabbedPane实现关闭按钮 | 学步园
- 简述java异常处理机制
- 【iCore3 双核心板_ uC/OS-III】例程一:认识 uC/OS-III
- Linux配置yum源(离线和在线)
- java 语法检查_java编译期间的语法检查
- 如何使用 AirPlay 在 Mac 上使用 HomePod?
- 【教程搬运】廖雪峰Git的使用教程(一)
- android 锁屏应用,推荐几款好用的安卓(Android)手机锁屏软件
- java表格居中_让表格水平垂直居中
- 服务器获取请求ip地址
- 算法导论 9.3-7 设计一个O(n)时间的算法,对于一个给定的包含n个互异元素的集合S和一个正整数k≤n,该算法能够确定S中最接近中位数的k个元素。
- MyEclipse断点无效
- [BFS]愿天下有情人都是失散多年的兄妹
- 几种OSM数据下载方式的详细介绍
- maya群体拼图阵列动画插件 color dancerv1.1下载及教程
- ios 常用的第三方库
- 机器学习算法系列(七)-对数几率回归算法(一)(Logistic Regression Algorithm)
- HTML网页获取当前定位经纬度/地理位置定位/百度定位/高德定位
- 【RGB=HSI】单片机控制RGB单灯与HSI互转算法
热门文章
- MBR与GPT,BIOS与UEFI..总结
- 小白对于学习对象和类的总结,定义一个圆柱体类Cylinder,并创建相应的对象,然后计算圆柱体的底面积和面积.
- 开源资料:firework 脚本方面的资料
- 使用arduino平台调试STM32F103C8T6最小系统板3组串口全开
- 正确打开adams软件_adams软件在工程机械系统仿真中的应用案例.ppt
- 都吃移动营销饭,四大门户有什么不同姿势?
- 中台质疑背后的再“进化”
- Smartbi电子表格_零编码做报表
- 2022-2027年中国半导体整流设备市场竞争态势及行业投资前景预测报告
- 嵌入式学习(1)嵌入式的分类、ARM KEIL的说明、嵌入式操作系统、介绍