原理分析:
语句:$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(); ?>