PHP链式操作原理

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();

 

posted @   xiaobingch  阅读(355)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示