博主信息
博文 22
粉丝 0
评论 0
访问量 22618
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
【9/4】--方法的重载与call_user_funce_array对于方法重载的应用以及模拟TP5.1的框架链式查询
花弄的博客
原创
1505人浏览过

对于框架的链式查询的模拟如下.   首先是需要一个数据操作的入口类:在内部通过调用call_user_func_array方法来实现对数据操作类的链式调用.

实例

 * 用方法重载实现方法跨类调用
 */

//数据库操作的入口类
/**
 * 
 */

require 'Query.php';
class DB
{
	public static function __callStatic($name,$arguments)
	{
		return call_user_func_array([(new Query()),$name],$arguments);
	}
}

$result = DB::table('user')
			->field('id,username,sex,phone')
			->where('id > 7')
			->select();

以上的table,field,where,select就是相应的链式的组成sql的查询的方法.

具体方法如下:

实例

<?php

/**
 * 数据库查询类
 */


class Query
{
	//保存sql语句中的各个组成部分
	//selsect 字段列表 from 表名 where 条件
	private $sql = [];

	//数据库连接对象
	private $pdo = null;

	//构造方法,连接数据库
	public function __construct()
	{
		//连接数据库并返回pdo对象
		$this->pdo = new PDO('mysql:host=127.0.0.1;dbname=pdotest','root','root');
	}

	//table() 获取sql语句的表名
	public function table($table)
	{
		$this->sql['table'] = $table;
		return $this;
	}

	//获取sql语句的字段列表
	public function field($field)
	{
		$this->sql['field'] = $field;
		return $this;
	}

	//获取sql语句的条件
	public function where($where)
	{
		$this->sql['where'] = $where;
		return $this;
	}

	//查询,终极方法
	public function select()
	{
		//拼接sql查询语句
		$sql = "SELECT {$this->sql['field']} FROM {$this->sql['table']} WHERE {$this->sql['where']}";
		$stmt = $this->pdo->prepare($sql);
		$stmt->execute();
		print_r($sql);
		return $stmt->fetchALL(PDO::FETCH_ASSOC);
	}

}


通过一层一层的链式往下级的调用来组成整个sql的查询过程.而且方法的调用是不分顺序的,只要保证终极方法在最后即可.得到结果集后直接输出即可.可以说是一次编写,多次复用了,虽然第一次写看起来是有点麻烦,但是相对于每次查询都写一次的过程式程序来说,这个已经实现绝大多数的数据查询的代码复用.

具体的执行的结果如下:

res.jpg


批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学