文档章节

php __call()方法实现数据库连贯操作

j
 jims
发布于 2016/04/20 17:47
字数 303
阅读 40
收藏 3
点赞 1
评论 0
使用__call()方法来实现数据库连贯操作
<?php
 // 使用__call()方法来实现数据库连贯操作
 // 申明一个Db类(数据库操作类)的简单操作模型

class Db{
   private $sql = array(
      "field" => "",
      "where" => "",
      "order" => "",
      "limit" => "",
      "group" => "",
      "having" => "",
   );
   
   // 连贯操作调用field() where() order() limit() group() having()方法,组合sql语句
   function __call($methodName,$args){
      // 将第一个参数(代表不存在方法的方法名称),全部转成小写方式,获取方法名称
      $methodName = strtolower($methodName);
      
      // 如果调用的方法名和成员属性数组$sql下标对应上,则将第二个参数给数组中下标对应的元素
      if(array_key_exists($methodName,$this->sql)){
         $this->sql[$methodName] = $args[0];
      }else{
         echo '调用类'.get_class($this).'中的方法'.$methodName.'()不存在';
      }
      // 返回自己对象,则可以继续调用本对象中的方法,形成连贯操作
      return $this;
   }
   // 输出连贯操作后组合的一个sql语句,是连贯操作最后的一个方法
   function select(){
      echo "SELECT {$this->sql['field']} FROM user {$this->sql['where']} {$this->sql['order']} {$this->sql['limit']} {$this->sql['group']}
            {$this->sql['having']}";
   }
}

$db = new Db();

// 连贯操作
$db->field('sex, count(sex)')
  ->where('where sex in ("男","女")')
  ->group('group by sex')
  ->having('having avg(age) > 25')
  ->select();
?>

© 著作权归作者所有

共有 人打赏支持
j
粉丝 4
博文 109
码字总数 29707
作品 0
合肥
ThinkPHP 连贯操作详解

ThinkPHP 连贯操作 连贯操作是 ThinkPHP 极富特色的一大特性,在使用连贯操作进行数据库操作时,就像玩游戏搭积木一样容易:嗯,程序编写就应该如此简洁而容易才对。 连贯操作的一个例子: ...

ywppengpeng ⋅ 2016/11/30 ⋅ 0

PHP中的__call()魔术方法2

相信大家在用ThinkPHP开源框架的时候,对Model类的连贯操作方法肯定很感兴趣吧,那今天我们就用PHP中的call()魔术方法去实现对SQL语句select的查询的连贯操作。 代码: <? header("Content-t...

陈仲国 ⋅ 2012/12/24 ⋅ 1

ThinkPHP 学习笔记 (二) Model模型操作

一、Model类中的部分属性意义及设定 tableName 属性 当表前缀和系统设置的前缀(DB_PREFIX)一致而表名和模型名称不一致时,可设置此属性,例如表名称为 users ,而模型名称为 UserModel ,那...

bugyang ⋅ 2013/02/19 ⋅ 0

ThinkPHP 3.0 功能特性和更新说明

ThinkPHP 3.0 预计将会在2012年1月15日正式发布,正逢tp六周年之际 ThinkPHP新版特性概述: 全新的CBD(核心+行为+驱动)架构模式,打造DIY框架和类AOP编程体验; 全新改进的项目编译机制,更...

unixocean ⋅ 2012/01/12 ⋅ 10

面向对象 MOdel

-----------------------------------config.php---------------------------------------------

方花 ⋅ 2017/11/14 ⋅ 0

ThinkPHP 查询数据 select(findAll) 方法

ThinkPHP 查询数据 ThinkPHP 查询数据主要提供以下几类查询: select:普通查询,同 findAll() 方法 find:取得符合查询条件的一条记录 getBy动态查询:根据某个字段取得符合查询条件的一条记...

WangEven ⋅ 2012/05/10 ⋅ 0

ThinkPHP的CURD方法及查询方法一览

所谓CURD。即对数据库操作的四个基本操作(CURD):C:create(创建)、U:update(更新)、R:read(读取)和D:detele(删除)。 在ThinkPHP中,并不是一定以这几个名字的方法,这里列出常见的:selec...

WangEven ⋅ 2012/05/09 ⋅ 0

ThinkPHP框架安全实现分析

ThinkPHP框架是国内比较流行的PHP框架之一,虽然跟国外的那些个框架没法比,但优点在于,恩,中文手册很全面。最近研究SQL注入,之前用TP框架的时候因为底层提供了安全功能,在开发过程中没怎...

simple简单 ⋅ 2016/12/23 ⋅ 0

phalcon-入门篇8(Model层基础使用2)

本教程基于phalcon2.0.9版本 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 在上一节我们已经介绍了,phalcon-Model层的配置和最简单的CURD的使用,那么你认为这样就完了...

喵了_个咪 ⋅ 2016/03/01 ⋅ 3

YurunPHP 2.1 数据库驱动改为 PDO,放弃 PHP 5.3

YurunPHP 2.1终于是发布了,这段时间忙,不过也没停下框架开发维护的脚步。 这次更新主要放弃支持5.3,转而支持PHP5.4版本。数据库操作统一用PDO了。 总共是26个新增功能,10个调整优化,19个...

宇润 ⋅ 2017/05/15 ⋅ 36

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Boot整合模板引擎thymeleaf

项目结构 引入依赖pom.xml <!-- 引入 thymeleaf 模板依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId......

yysue ⋅ 13分钟前 ⋅ 0

ConstraintLayout使用解析

AndroidStudio3.0创建Project默认的布局就是ConstraintLayout。 AndroidStudio3.0前的可以自己修改,使用ConstraintLayout。 为了要使用ConstraintLayout,我们需要在app/build.gradle文件中...

_OUTMAN_ ⋅ 25分钟前 ⋅ 0

OSChina 周三乱弹 —— 这样的女人私生活太混乱了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 胖达panda :你经历过体验到人生的大起大落吗?我一朋友在10秒内体验了,哈哈。@小小编辑 请点一首《almost lover》送给他。 《almost love...

小小编辑 ⋅ 58分钟前 ⋅ 9

自己动手写一个单链表

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对...

公众号_好好学java ⋅ 今天 ⋅ 0

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部