文档章节

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

j
 jims
发布于 2016/04/20 17:47
字数 303
阅读 43
收藏 3
使用__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();
?>

本文转载自:http://my.oschina.net/u/144160/admin/new-blog

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

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

ywppengpeng
2016/11/30
9
0
ThinkPHP 学习笔记 (二) Model模型操作

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

bugyang
2013/02/19
0
0
PHP中的__call()魔术方法2

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

陈仲国
2012/12/24
0
1
ThinkPHP 3.0 功能特性和更新说明

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

unixocean
2012/01/12
5.5K
10
ThinkPHP的CURD方法及查询方法一览

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

WangEven
2012/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
6
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
5
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部