Blogger Information
Blog 22
fans 0
comment 0
visits 18095
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
【9/4】--方法的重载与call_user_funce_array对于方法重载的应用以及模拟TP5.1的框架链式查询
花弄的博客
Original
1218 people have browsed it

对于框架的链式查询的模拟如下.   首先是需要一个数据操作的入口类:在内部通过调用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


Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments