background image

php 实现数据库类的连贯查询

如果你是一名使用过多种框架的 php 程序员,你一定见过这样的查询语句:

$mysql->limit(’0,10′)->order(‘id desc’)->findall();

上面的查询语句,连续使用->操作符进行操作,并最终返回一个查询结果,那么这是如
何实现的呢。

我们来简单分析一下:

->操作符用来访问对象,上面的语句一共使用了 3 次->操作符,而最后一次返回的是查
询结果,这说明,前 2 次->访问后,返回的应该是一个对象,因为在 php 中,如果你对
一个非对象使用->操作符是不可能的。这告诉我们,$mysql 实例中的 limit 和 order 方

 

法都返回一个对其所在类自身的引用即 return $this,了解了这一点,那么我们就可以
实现连贯查询了。请看站长写的示例代码:

<?php
*类功能:实现数据库的连贯查询操作
*/
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();