文档章节

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
博文 170
码字总数 29865
作品 0
合肥
ThinkPHP 连贯操作详解

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

ywppengpeng
2016/11/30
9
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 学习笔记 (二) Model模型操作

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

bugyang
2013/02/19
0
0
ThinkPHP的CURD方法及查询方法一览

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

WangEven
2012/05/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
1
0
12.17 Nginx负载均衡

Nginx负载均衡 下面的dig看到可以返回2个IP,就是解析出来的IP,这样我们可以做负载均衡。 dig www.qq.com 1.vim /usr/local/nginx/conf/vhost/fuzai.conf 2.添加如下配置 upstream qq //定义...

芬野de博客
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部