文档章节

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

j
 jims
发布于 2016/04/20 17:47
字数 303
阅读 45
收藏 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
PHP中的__call()魔术方法2

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

陈仲国
2012/12/24
0
1
ThinkPHP 学习笔记 (二) Model模型操作

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

bugyang
2013/02/19
0
0
《PHP框架Laravel学习》系列分享专栏

《PHP框架Laravel学习》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201735.html 文章 Laravel教程:laravel 4安装及入门 Laravel4中文手册下载 Laravel配置教...

开元中国2015
11/06
0
0
Laravel框架定时任务2种实现方式示例

本文实例讲述了Laravel框架定时任务2种实现方式。分享给大家供大家参考,具体如下: 第一种 1、生成一个commands文件 > php artisan make:command test 2、打开文件进行修改 laravelAppCons...

开元中国2015
12/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

react-native-storage(数据存储)文档介绍

中文doc:仅供参考 import Storage from 'react-native-storage'; import {AsyncStorage} from 'react-native'; var storage = new Storage({ // 最大容量,默认值1000条数据循环存储 ......

凌宇之蓝
10分钟前
2
0
jQuery 事件 - delegate() 方法

当点击鼠标时,隐藏或显示 p 元素: $("div").delegate("button","click",function(){ $("p").slideToggle();}); 定义和用法 delegate() 方法为指定的元素(属于被选元素的子元素)添加...

architect刘源源
18分钟前
1
0
java集合--Queue用法【转】

队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的 端称为队头。队列中没有元素时,称为空队...

中国扛把子
21分钟前
2
0
区块链教程汇总

区块链的重要性已经毋庸置疑,但对大多数跃跃欲试的开发者而言,去中心化思想、非对称加密、共识算法等技术点的理解和运用,都是入门区块链开发的挑战。合适的区块链开发教程可以极大地缩短区...

geek12345
21分钟前
2
0
js操作时间

获取当前时间 function getSystemDate(){ var systemDate = new Date(); // 获取当年 var year = systemDate.getFullYear(); // 获取当月 (月+1是因为js中......

简心
29分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部