文档章节

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

j
 jims
发布于 2016/04/20 17:47
字数 303
阅读 173
收藏 3

精选30+云产品,助力企业轻松上云!>>>

使用__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
博文 172
码字总数 30033
作品 0
合肥
私信 提问
加载中
请先登录后再评论。
thinkphp_3.2.1

心得体会:多理解编程思想、多查阅api文档、项目架构、如何设计 想想之前的学习方法简直太死板了,眼见不开阔,跟牛人接触的太少了,自己闷葫芦写的乱七八糟!!重要的是眼见思想,有了整体的...

LizRose
2016/05/04
71
0
thinkPHP学习备查-1

在自动生成的目录中,为了防止访问到应用程序的目录结构,会创建个index.html文 件。当然,你也可以自行设置。 2. //禁止访问模块 'MODULEDENYLIST' => array('Common','Runtime'), 3. //允许......

hustnzj
2016/06/04
13
0
php 的魔术方法__call()的应用

php的魔术方法call()是在访问对象中不存在的方法时会自动调用该方法,可以在该方法中给出错误提示信息反馈回调用用户。但是魔术方法call()不只这样用,可以实现像codeIgniter的数据库查询构造...

热血夺刀,梦还长存
06/11
0
0
php 的魔术方法__call()的应用

php的魔术方法call()是在访问对象中不存在的方法时会自动调用该方法,可以在该方法中给出错误提示信息反馈回调用用户。但是魔术方法call()不只这样用,可以实现像codeIgniter的数据库查询构造...

osc_52r4y6wv
06/12
4
0
ThinkPHP 连贯操作详解

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

ywppengpeng
2016/11/30
31
0

没有更多内容

加载失败,请刷新页面

加载更多

在Python中从字符串转换为布尔值? - Converting from a string to boolean in Python?

问题: Does anyone know how to do convert from a string to a boolean in Python? 有谁知道如何在Python中从字符串转换为布尔值? I found this link . 我找到了此链接 。 But it doesn't......

javail
44分钟前
19
0
中国饭店协会数据表明

记者了解到,中国饭店协会数据表明,2018年全国餐饮收入42716亿元,同比增长9.5%.根据国家统计局数据显示,截至2017年底,限额以上餐饮行业的从业人数达到2232万人,巨大的餐饮市场背后,餐饮行业的...

asd369
今天
29
0
OSChina 周六乱弹 —— 日本的丧尸光天化日之下都开始……

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《風の手枕》- 増田俊郎 手机党少年们想听歌,请使劲儿戳(这里) @码界农民工 :...

小小编辑
今天
43
0
Hacker News 简讯 2020-07-11

更新时间: 2020-07-11 03:01 The TikTok app is no longer permitted on mobile devices that access Amazon email - (twitter.com) TikTok应用程序不再允许在访问亚马逊电子邮件的移动设备上......

FalconChen
今天
155
0
是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
昨天
29
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部