php实现数据库链式查询的简单例子

发布时间:2020-01-29编辑:脚本学堂
如果你大家使用过多种框架的话,一定见过这样的查询语句:$mysql->limit(’0,10′)->order(‘id desc’)->findall();这条语句连续使用->操作符进行操作,并最终返回一个查询结果,这种效果是如何实现的呢?快来看看本文介绍的方法吧。

原理分析:
语句:$mysql->limit(’0,10′)->order(‘id desc’)->findall();
->操作符用来访问对象,上面的语句一共使用了3次->操作符,而最后一次返回的是查询结果,这说明,前2次->访问后,返回的应该是一个对象,因为在php中,如果你对一个非对象使用->操作符是不可能的。这告诉我们,$mysql实例中的limit和order方法都返回一个对其所在类自身的引用即 return $this,了解了这一点,就可以实现链式查询了。
下面是一个简单的例子,供大家参考,主要是了解实现原理:

<?php
/*
 * php 链式查询
 * site www.jb200.com
*/
class mysql_query{
  var $tbl=’user’;//要操作的表名
  var $limit=”;//存储limit语句的变量
  var $order=”;//存储order语句的变量
  var $sql=”;//存储完整sql语句的变量
function limit($str){
  $this->limit=’limit ‘.$str;//设置limit语句
  //返回对类自身的引用,这里不能使用return new mysql_qery(),
  //因为这样相当于又创建了类的一个新实例,那么上一步设置的limit语句,在新实例中是不存在的
  //大家可以自己实验
  //因此要返回$this,即当前类的实例
  return $this;
}
function order($str){
  $this->order=’order by ‘.$str;//设置order语句
  return $this;//返回对类自身的引用
}
function findall(){
  $this->sql=’select * from ‘.$this->tbl.’ ‘.$this->order.’ ‘.$this->limit;//拼接sql语句
  echo $this->sql;//输出,由于是示例,所以没有写查询数据库的代码
}
}
$mysql = new mysql_query();
$mysql->limit(’0,10′)->order(‘id desc’)->findall();
?>