php设计模式【ORM模式】- 伪代码 2021-04-19

ORM 对象关系映射


  • 15年那时候 tp3.2, ci4.x, phalcon3.x , 现在 laravel … 只要是框架 基本提供ORM, 除非不操作数据库
  • 为什么不写依据,sql查询,却能操作数据库?哈哈哈哈 来学 ORM
  • 老规矩, 文字描述 + 伪代码

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

  • 面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,
  • 而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。

上ORM伪代码

<?php
// 概念: 描述如何创建提供透明访问任何数据源的对象。数据映射模式,也叫数据访问对象模式,或数据对象映射模式。
// 目的: 数据映射模式的目的是让持久化数据存储层、驻于内存的数据表现层、以及数据映射本身三者相互独立、互不依赖

// 将对象映射成数据字段, 通过操作对象,从而操作数据库的curd
// ORM,  Object Reflect Mapping

// ORM类


namespace User;

class User {


	public $id;
	public $name;
	public $mobile;
	public $regtime;

	protected $db;

	public function __construct($id){

		$this->db = new MySQL();
		$this->db->connect('127.0.0.1','root','root','test');
		$res = $this->db->query("select * from user limit 1");
		$data = $res->fetch_assoc()
		
		$this->id = $data['id'];
		$this->name = $data['name'];
		$this->mobile = $data['mobile'];
		$this->regtime = $data['regtime'];

	}

	// 析构函数中默认更新数据库的方法
	public function __destruct(){
		$this->db->update("update user set name='{$this->name}' , mobile='{$this->mobile}'  where id = '{$this->id}' ");
	}

}


// 取出一条, 然后用修改对象属性的方式修改
$user = new User(1);
$user->mobile = '18733333333';
$user->regtime = '2021.04.9';

// 在实例化结束要进行销毁时候, 调用析构函数



// 复杂的ORM
// 使用工厂方法代替new
// 使用注册器模式在全局注册后使用
// 使用

理解设计模式主要是思路, 从面向对象的学习接触设计模式, 从设计模式深入理解面向对象。
组织代码的思路和可以使用的不同手段可以让你的代码优雅, 高内聚低耦合。


Author: Silvercell , 白嫖请素质三连, thank you ~
happy coding! 祝你编程越来越6,666,666,666.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
自主封装的PHP ORM框架,面向对象的PDO数据库操作,API框架,支持Get/Post/Put/Delete多种请求方式。 代码示例: <?php use Models\User; require '../application.php'; require '../loader-api.php'; //适合查询,如:获取用户列或者单个用户信息 execute_request(HttpRequestMethod::Get, function() { $action = request_action(); //判断是否存在 if ($action == 1) { list($type, $value) = filter_request(array( request_int('type', 1, 2, 3), //1.用户名 2.邮箱 3.手机号 request_string('value'))); $type_field_map = array( 1 => User::$field_username, 2 => User::$field_email, 3 => User::$field_phone ); if ($type == 2 && !is_email($value) || $type == 3 && !is_mobilephone($value)) { die_error(USER_ERROR, $type_field_map[$type]['name'] . '格式无效'); } $user = new User(); $user->set_where_and($type_field_map[$type], SqlOperator::Equals, $value); $result = $user->exists(create_pdo()); echo_result($result ? 1 : 0); //存在返回1,不存在返回0 } //查询单条信息 if ($action == 2) { list($userid) = filter_request(array( request_userid())); //查询单条数据 $user = new User($userid); //set_query_fields可以指定查询字段,下面两种写法均可 //$user->set_query_fields('userid, username, email'); //$user->set_query_fields(array(User::$field_userid, User::$field_username, User::$field_email)); //还可设置where条件进行查询 //$user->set_where_and(User::$field_status, SqlOperator::Equals, 3); //$user->set_where_and(User::$field_truename, SqlOperator::IsNullOrEmpty); //$user->set_where_and(User::$field_age, SqlOperator::In, array(27, 29)); //$user->set_where_and(User::$field_regtime, SqlOperator::LessThan, '-6 month'); //创建数据库连接 $db = create_pdo(); $result = $user->load($db, $user); //也可以用Model类的静态方法 //$result = Model::load_model($db, $user, $user); if (!$result[0]) die_error(PDO_ERROR_CODE, '获取用户信息时数据库错误'); if (!$user) di
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

银色种子

打赏 >100 请留言,并私信

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值