在接口被实例化以后的每个方法中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语言中文社区...相关推荐

  1. PHP中的__toString方法(实现JS里的链式操作)

    _toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错 Catchable fatal error: Object of class String could not be co ...

  2. php加数据库开发案例,PHP简单数据库操作类实例【支持增删改查及链式操作】

    本文实例讲述了PHP简单数据库操作类.分享给大家供大家参考,具体如下: 在进行项目开发时,数据库是必不可少的东西了.但是很多时候却又对数据库SQL语句的繁杂而感到头疼.提供一个我自己使用的数据库操作类 ...

  3. rust的矿坑_转: Rust中的Pin详解 【Rust语言中文社区】

    Rust中的Pin详解 原创 automanyang Rust语言中文社区 昨天 https://mp.weixin.qq.com/s/PjctbPbyR5OeaqTHZdB5uQ 相关概念 Pin ...

  4. php 接收curl json数据格式,curl发送 JSON格式POST数据的接收,以及在yii2框架中的实现原理【精细剖析】...

    1.通过curl发送json格式的数据,譬如代码: function http_post_json($url, $jsonStr) { $ch = curl_init(); curl_setopt($ ...

  5. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  6. mysql可以使用mybaties框架吗_搭建一个简单的mybatis框架

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  7. python协程框架_[记录]python的简单协程框架(回调+时间循环+select)

    # -*- coding: utf-8 -*- # @Time : 2018/12/15 18:55 # @File : coroutine.py #一个简单的 Coroutine 框架 import ...

  8. jquery框架封装及解析原理+自己搭建jquery框架+注释

    <script> //利用自执行函数封装jq代码,避免暴露太多的全局变量 (function (window) { //为了以后能方便借用数组的各种方法,提前存到变量中,全局都是用这一个数 ...

  9. glide源码中包含了那种设计模式_腾讯阿里华为小米等大厂Android高端面试题145题(含部分详解)-Go语言中文社区...

    前言 本篇是结合我之前面试别人的经验,以及跟一些在大厂待过的朋友,讨论总结出的一份很全面的大公司需要用到的一些高端Android技术.这里也专门整理了一个文档,重点和难点都有详细解析. 这些题目有点技 ...

最新文章

  1. 查看MS SQL Server数据库每个表占用的空间大小
  2. 最小二乘法和最大似然估计
  3. 解读三种虚拟化之路连载一:x86虚拟化概述
  4. 在vue中methods互相调用的方法
  5. linux mint 用户管理,Linux Mint 新工具:将网站转变为独立的应用
  6. YBTOJ:最短时间(长链剖分、线段树)
  7. Linux C 数据结构——二叉树
  8. Set up Ubuntu 12.04 Laptop as WiFi Hotspot (ad-hoc) to Share Wired Internet
  9. excel中如何动态地创建控件以显示查询结果_一起学Excel专业开发02:专家眼中的Excel及其用户...
  10. 手把手教你云服务器如何搭建typecho博客网站(包括配置免费SSL证书)
  11. python中的rt_TensorRT学习总结
  12. Linux内核中的延时函数
  13. 项目部署到自己的IIS上
  14. Probabilistic Matrix Factorization(概率矩阵分解)
  15. 什么是DNS的正向解析与反向解析?代码实现?
  16. 项目管理—领导力与管理的区别
  17. Ada的故事(转自互联网)
  18. 一篇文章,读懂品牌广告与效果广告的相同和不同
  19. 【亲测成功】Ubuntu18.04升级GLIBC2.27——解决报错:ibc.so.6: version `GLIBC_2.28‘ not found
  20. JAVA 导出大批量数据EXCEL

热门文章

  1. Java设计模式学习总结(1)——设计模式简介
  2. Netty学习总结(3)——Netty百万级推送服务
  3. python并列语句_Python基础_控制语句
  4. ios java 加密_AES加密 - iOS与Java的同步实现
  5. linux系统MVS安装,Ubuntu 环境 openMVG+openMVS 配置
  6. consul 数据持久化_一起学习Nacos的数据持久化
  7. DARPA 想用自动化技术制造出最强的黑客
  8. CodeBlocks下搭建Opencv——问题之——计算机中丢失 opencv_world300.dll
  9. 七个小技巧保护无线网络安全
  10. linux里shell中的test代表的意义