php框架中数据库模型层原理,简单模拟ThinkPHP框架模型层对数据库的链式操作-Go语言中文社区...
在接口被实例化以后的每个方法中return 类本身就可以达到链式操作。
改善了写多行代码执行一次操作的缺点。
下面请看我的代码,若有疑问,请留言给我。
class Instance{
public static $db;
public $mysql=NULL;
private function Connect($host,$user,$pwd,$port=3306){
$this->mysql=mysqli_connect($host,$user,$pwd,$port) or die('Can not Connect Mysql!');
}
private function __construct(){}
private function __clone(){}
public static function getInstance($host,$user,$pwd,$port=3306){
if(!isset(self::$db)){
self::$db = new self;
self::$db->Connect($host,$user,$pwd,$port);
}
return self::$db;
}
}
interface SQL{
/**
* @param string $sql SQL语句
* @return mixed
*/
public function Query($sql);
/**
* @param array $condition 条件
* @return mixed
*/
public function Select($condition=array());
/**
* @param array $condition 条件
* @return mixed
*/
public function Where($condition=array());
/**
* @param array $condition 条件
* @return mixed
*/
public function Group($condition=array());
/**
* @param array $condition 条件
* @return mixed
*/
public function Limit($condition=array());
/**
* @param array $condition 条件
* @return mixed
*/
public function Order($condition=array());
/**
* @return mixed 关闭数据库连接
*/
public function Close();
}
class CoherentModel implements SQL{
private $db; //数据库资源
protected $sql; //SQL语句
protected $result; //结果
public function __construct($db){
if(empty($db->mysql)){
exit('db not connected !');
}
$this->db=$db->mysql;
}
public function Query($sql=''){
$this->sql=$sql;
$this->result=mysqli_query($this->db,$sql);
return $this->result;
}
/**
* @param array $condition 条件
* @return mixed
*/
public function Select($condition=array()){
return $this;
}
/**
* @param array $condition 条件
* @return mixed
*/
public function Where($condition=array()){
return $this;
}
/**
* @param array $condition 条件
* @return mixed
*/
public function Group($condition=array()){
return $this;
}
/**
* @param array $condition 条件
* @return mixed
*/
public function Limit($condition=array()){
return $this;
}
/**
* @param array $condition 条件
* @return mixed
*/
public function Order($condition=array()){
return $this;
}
/**
* @return mixed 关闭数据库连接
*/
public function Close(){
mysqli_close($this->db);
}
}
/**
* 单例模式
*/
$Instance = Instance::getInstance('127.0.0.1','mysql','password');
$Model = new CoherentModel($Instance::$db);
/**
* 链式操作
*/
$Model->Where()->Group()->limit()->Select();
php框架中数据库模型层原理,简单模拟ThinkPHP框架模型层对数据库的链式操作-Go语言中文社区...相关推荐
- PHP中的__toString方法(实现JS里的链式操作)
_toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错 Catchable fatal error: Object of class String could not be co ...
- php加数据库开发案例,PHP简单数据库操作类实例【支持增删改查及链式操作】
本文实例讲述了PHP简单数据库操作类.分享给大家供大家参考,具体如下: 在进行项目开发时,数据库是必不可少的东西了.但是很多时候却又对数据库SQL语句的繁杂而感到头疼.提供一个我自己使用的数据库操作类 ...
- rust的矿坑_转: Rust中的Pin详解 【Rust语言中文社区】
Rust中的Pin详解 原创 automanyang Rust语言中文社区 昨天 https://mp.weixin.qq.com/s/PjctbPbyR5OeaqTHZdB5uQ 相关概念 Pin ...
- php 接收curl json数据格式,curl发送 JSON格式POST数据的接收,以及在yii2框架中的实现原理【精细剖析】...
1.通过curl发送json格式的数据,譬如代码: function http_post_json($url, $jsonStr) { $ch = curl_init(); curl_setopt($ ...
- 如何搭建python框架_从零开始:写一个简单的Python框架
原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...
- mysql可以使用mybaties框架吗_搭建一个简单的mybatis框架
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- python协程框架_[记录]python的简单协程框架(回调+时间循环+select)
# -*- coding: utf-8 -*- # @Time : 2018/12/15 18:55 # @File : coroutine.py #一个简单的 Coroutine 框架 import ...
- jquery框架封装及解析原理+自己搭建jquery框架+注释
<script> //利用自执行函数封装jq代码,避免暴露太多的全局变量 (function (window) { //为了以后能方便借用数组的各种方法,提前存到变量中,全局都是用这一个数 ...
- glide源码中包含了那种设计模式_腾讯阿里华为小米等大厂Android高端面试题145题(含部分详解)-Go语言中文社区...
前言 本篇是结合我之前面试别人的经验,以及跟一些在大厂待过的朋友,讨论总结出的一份很全面的大公司需要用到的一些高端Android技术.这里也专门整理了一个文档,重点和难点都有详细解析. 这些题目有点技 ...
最新文章
- 查看MS SQL Server数据库每个表占用的空间大小
- 最小二乘法和最大似然估计
- 解读三种虚拟化之路连载一:x86虚拟化概述
- 在vue中methods互相调用的方法
- linux mint 用户管理,Linux Mint 新工具:将网站转变为独立的应用
- YBTOJ:最短时间(长链剖分、线段树)
- Linux C 数据结构——二叉树
- Set up Ubuntu 12.04 Laptop as WiFi Hotspot (ad-hoc) to Share Wired Internet
- excel中如何动态地创建控件以显示查询结果_一起学Excel专业开发02:专家眼中的Excel及其用户...
- 手把手教你云服务器如何搭建typecho博客网站(包括配置免费SSL证书)
- python中的rt_TensorRT学习总结
- Linux内核中的延时函数
- 项目部署到自己的IIS上
- Probabilistic Matrix Factorization(概率矩阵分解)
- 什么是DNS的正向解析与反向解析?代码实现?
- 项目管理—领导力与管理的区别
- Ada的故事(转自互联网)
- 一篇文章,读懂品牌广告与效果广告的相同和不同
- 【亲测成功】Ubuntu18.04升级GLIBC2.27——解决报错:ibc.so.6: version `GLIBC_2.28‘ not found
- JAVA 导出大批量数据EXCEL
热门文章
- Java设计模式学习总结(1)——设计模式简介
- Netty学习总结(3)——Netty百万级推送服务
- python并列语句_Python基础_控制语句
- ios java 加密_AES加密 - iOS与Java的同步实现
- linux系统MVS安装,Ubuntu 环境 openMVG+openMVS 配置
- consul 数据持久化_一起学习Nacos的数据持久化
- DARPA 想用自动化技术制造出最强的黑客
- CodeBlocks下搭建Opencv——问题之——计算机中丢失 opencv_world300.dll
- 七个小技巧保护无线网络安全
- linux里shell中的test代表的意义