php静态链式,静态方法数据库查询的链式操作--2019年6月17日22:30分

本文通过一个实际的PHP代码示例,详细解释了如何使用方法重载和属性重载实现数据库查询的链式操作。示例中展示了Db类和Query类的使用,Db类用于建立数据库连接,并通过__callstatic方法处理动态调用,Query类则负责具体的数据查询操作,包括设置表名、字段、查询条件和限制。这种链式操作是现代PHP框架中的常见实践,提高了代码的可读性和灵活性。
摘要由CSDN通过智能技术生成

本篇文章主要知识点

1.方法重载和属性重载(重点)

案例内容

数据库查询的链式操作

zy01.php的内容

实例

// 注意,下面这些代码是自己敲的,但是注释是复制老师的.

require 'zy02.php';

class Db

{

// 数据库连接对象,受保护的静态对象

protected static $pdo = null;

// 数据库连接方法,每次查询时再连接, 实现真正的惰性连接,节省系统开销

public static function connection()

{

// 连接数据库,数据库的地址和账号密码

self::$pdo = new PDO('mysql:host=localhost;dbname=php','root','root');

}

public static function __callstatic($name,$arguments)

{

// 创建一个pdo对象,并连接数据库

self::connection();

// 实例化查询类,将连接对象做为参数

$query = new query(self::$pdo);

// 执行查询类Query中的对象方法, 注意参数是数组,我只需要第一个参数:表名, 所以加了索引键名

return call_user_func_array([$query,$name],[$arguments[0]]);

}

}

// 客户端的链式调用

// 以Db类做入整数数据库操作的入口, SQL语句的各个部分用对象方法提供

// 链式操作是现代PHP框架的基础,非常有用

$staffs = Db::table('staff')

->field('staff_id,name,position,mobile')

->where('staff_id > 2') // = 2,只会输出一条

->limit(5)

->select();

foreach ($staffs as $staff) {

print_r($staff); echo '
';

}

运行实例 »

点击 "运行实例" 按钮查看在线实例]

zy02.php文件的内容

实例

// 数据库查询类

class Query

{

// 连接对象

public $pdo = null;

// 数据表名

public $table = '';

// 字段列表

public $field = '';

// 查询条件

public $where = '';

// 显示数量

public $limit = 0;

// 构造方法,初始化连接对象

public function __construct($pdo)

{

// 连接对象是对象方法的共享属性

$this->pdo = $pdo;

}

// 调用表名

public function table($tablName)

{

$this->table = $tablName;

// 返回当前对象,便于链式调用该对象的其它方法

return $this;

}

// 设置查询字段

public function field($fields)

{

$this->field = $fields;

return $this;

}

// 设置查询条件

public function where($where)

{

$this->where = $where;

return $this;

}

// 设置显示数量

public function limit($limit)

{

$this->limit = $limit;

return $this;

}

public function select()

{

// 查询条件分开设置, 可以确保链式方法独立

// 然后判断是否为空

$fields = empty($this->fields) ? '*' : $this->field;

$where = empty($this->where) ? 'WHERE ': $this->where;

$limit = empty($this->limit)? ' LIMIT ':$this->limit;

// 拼接sql语句

$sql = 'SELECT '.$fields. ' FROM '.$this->table.$where . $limit;

// 预处理查询

$stmt = $this->pdo->prepare($sql);

$stmt->execute();

return $stmt->fetchAll(PDO::FETCH_ASSOC);

}

}

运行实例 »

点击 "运行实例" 按钮查看在线实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值