PHP链式操作原理
2024-10-09 04:04:12
1)第一种方法
<?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;//输出,由于是示例,所以没有写查询数据库的代码
}
}
//Example
$mysqlDb=new mysql_query();
$result = $mysqlDb->limit(’0,10′)->order(‘id desc’)->findall();
print_r($result);
2)php __call()方法实现数据库连贯操作
<?php
namespace Config;
// 使用__call()方法来实现数据库连贯操作
// 申明一个Db类(数据库操作类)的简单操作模型
class LinkAction
{
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 LinkAction();
// 连贯操作
$db->field('sex, count(sex)')
->where('where sex in ("男","女")')
->group('group by sex')
->having('having avg(age) > 25')
->select();
最新文章
- Daily Scrum02 12.10
- (转)漫谈SOA(面向服务架构)
- 使用JS构建简单Map(转)
- 重新加载maven项目的依赖项
- 深入探析koa之异步回调处理篇
- Codeforces Testing Round #12 A. Divisibility 水题
- 关于谷歌Chrome浏览器的两个Bug?
- CSS3 概览 更新时间 2014-0412-1317
- Java中基本数据类型和包装器类型的关系
- 上海西服定制Angry Eagle 顶级西服,私人订制你的美
- maven+spring mvc初尝试
- T-SQL 创建、修改、删除数据库,表语法
- Maven搭建struts2+spring+hibernate环境
- POJ 2609 Ferry Loading
- 关于回文串的DP问题
- 关于php变量的赋值和引用的区别
- C/C++语言简介之运算符
- 和菜鸟一起学产品之用户体验设计UED
- vue-cli 2篇官方文档记录收藏
- Java 由浅入深GUI编程实战练习(二)