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

PHP ORM(面向对象PDO数据库框架&API框架) 自主封装的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 立即下载

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.

MicroORM:令人印象深刻的轻量级PHP ORM #Cashew-Micro ORM轻量级PHP ORM解决方案。 目前仅支持MySQL。 ###安装在应用程序的根文件夹中运行以下命令 composer require "andela-cnnadi/micro-orm": "dev-master" 或者,您可以仅将软件包名称“ andela-cnnadi / micro-orm”:“ dev-master”添加为composer.json文件中的依赖项。 ###入门要开始,您需要配置数据库连接。 这可以在软件包目录中的config文件夹中完成。 有一个名为config.php的文件,您可以填写数据库配置信息。 ###开始创建模型要创建模型,您需要创建一个扩展Cashew类的新类。 每个单独的模型都应扩展此类。 推荐的文件结构如下所示。 有关更多详细信息,请参见示例。 默认情况下,Cashew Micro-ORM使用表名称的复数约定 立即下载

相关推荐

c语言【分糖果】2023蓝桥杯4124(枚举,递归,dfs)

但是这是不符合我们糖果刚好分完的条件的,我们应该往回退到上一层,也就是孩子6这层,然后j+1=3,孩子7分到3个第二种糖果,这也不符合我们糖果刚好分完的条件,然后就会再次回退到孩子6这里,然后j+1=4,让我们的孩子7获得5块第二种糖果,然后还是不符合糖果刚分完的条件,于是再一次退回到孩子6这里,然后就会有外循环i+1=1,j=1,孩子7分到1块第一种糖果1块第二块糖果......然后就是这样的不停地回溯,试探,直到把整棵树遍历一遍,并且记录所有的满足条件的组合。先放一下我的代码,我的代码超时啦救命!

weixin_74331419的博客 730

记录一下TP3的ORM,学习参考

<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2014 http://thinkphp.cn All.

qq_20729891的博客 1万+

高通camera open代码流程(hal到kernel)

内容:简单介绍Camera open代码调用流程,从HAl到kernel。(api1+hal1) 前言 Android camera api和hal对应关系。安卓在版本更新过程中,camera相关代码也经历了几个版本的更新,表现为camera HAL版本更新(HAL1->HAL2->HAL3),camera API版本更新(camera API1->camera API2),接下...

oxoo123的专栏 4276

thinkphp3.2源码----获取并保存模型对象与数据库连接实例

摘自文档: 在ThinkPHP中基础的模型类就是 Think\Model 类,该类完成了基本的CURD、ActiveRecord模式、连贯 操作和统计查询,一些高级特性被封装到另外的模型扩展中。 基础模型类的设计非常灵活,甚至可以无需进行任何模型定义,就可以进行相关数据表的ORM和CURD操 作,只有在需要封装单独的业务逻辑的时候,模型类才是必须被定义的。 使用模型类

小菜鸟正洋洋的博客 3129

2.4G/4G天线共存方案:Air8101多频段隔离设计实战(附波长计算表)

本文深入探讨了物联网设备中Wi-Fi 2.4GHz与4G LTE天线共存设计的实战方案。针对B40与2.4G频段紧邻带来的干扰挑战,文章系统性地提出了空间隔离、PCB布局优化、结构设计三重防线,并提供了关键的波长计算工具与系统级验证Checklist,旨在帮助工程师将多频段隔离设计从“玄学”变为可执行的工程规范。

weixin_29197051的博客 389

ScanNet数据集详解

ScanNet 是一个 RGB-D 视频数据集,在超过 1500 次扫描中包含了 250 万个视图,并标注了 3D 相机位姿、表面重建和实例级的语义分割。为了收集这些数据,设计了一个易于使用且具有扩展性的 RGB-D 捕获系统,包括自动化的表面重建和众包的语义标注。如果您想下载 ScanNet 数据,请使用您的机构邮箱地址填写一份 ScanNet 使用条款协议,并发送至 scannet@googlegroups.com。压缩包是将3D的标注信息“拍扁”成2D图片的结果,对应原始视频的每一帧。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 3919

从零构建PHP ORM框架(手把手带你理解底层原理与设计模式)

掌握PHP ORM框架设计原理,从零实现数据库对象映射。涵盖ActiveRecord模式、查询构造器与关系管理,提升代码可维护性与开发效率。手把手教学,适合中高级PHP开发者深入理解底层机制,值得收藏。

GatherLume的博客 1097

实现 PDF 添加水印的五种方式

PDF(Portable Document Format,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对 PDF 文件添加水印,以使其更具有辨识度或者保护其版权。本文将介绍如何使用 Spring Boot 来实现 PDF 添加水印的方式。

逸轩 6472

多表查询

多表查询 概述 基础语法: select ​ 列名列表 from ​ 表名列表 where… 多表查询的分类 内连接查询: 隐式内查询: 使用where消除无用的数据 显式内查询 外链接查询: 子查询:

sjwl0526的博客 1823

条码打印工具-Bartender的使用

文章目录1、安装Bartender1.解压安装包,可获得bartender2021版本和破解文本2. 双击“BarTender_2021_R1_Full_x64.exe”文件运行,勾选协议及软件安装设置3. 选择安装选项,自行选择勾选,点击Browser可更换软件安装路径4. 耐心等待软件安装完成,直接点击完成退出5. 此时会弹出提示需要激活许可证,先点击取消6. 接着将Crack夹中的“BarTend.exe”破解文件复制到软件安装目录中替换7. 再双击“serial.reg”导入注册,点击确定即可8.

暮紫的笔记本 1万+

李宏毅机器学习hw3

Homework 3 - Convolutional Neural Network 1作业概述 在food_11文件中有三个文件分别是training、validation、testing,打开training和validation可以看见总共有11种食物(0-10的类别编号),而testing是没有类别编号的。 然后用卷积神经网络对食物图片进行分类。 2导入用到的库 torch库 这个我弄了半天,直接pip总是timeout,用镜像源下下来又出现OSError: [WinError..

老问题的博客 4188

OWASP Top 10 安全入门实战:从原理到靶场构建全方位防御体系

Web应用安全是保障数字资产的核心,其基础在于理解常见攻击原理与防御机制。从概念上讲,安全风险通常源于信任边界模糊、输入验证缺失或配置不当。其技术原理涉及数据与指令的混淆、身份验证绕过及敏感信息保护失效等。掌握这些原理对构建健壮系统具有极高价值,能有效防止数据泄露、服务中断及未授权访问。在实际应用场景中,无论是开发新功能、代码审查还是系统运维,都需要系统性地应对这些风险。本文以权威的OWASP Top 10安全风险清单为框架,深入剖析了如**注入攻击**、**失效的访问控制**等核心漏洞的形成机制与修复方案

weixin_34221775的博客 330

化工设计软件:AutoCAD Plant 3D二次开发_(1).AutoCADPlant3D概述

AutoCAD Plant 3D 是一款专为化工行业设计的三维工厂设计和建模软件。它基于AutoCAD平台,提供了强大的三维建模功能和专业的化工设计工具,帮助工程师和设计师在工厂设计过程中提高效率和准确性。AutoCAD Plant 3D不仅能够创建详细的三维模型,还可以进行管道设计、设备布置、支架设计等复杂任务。通过上述案例,我们可以看出 AutoCAD Plant 3D 在化工厂设计中的强大功能和优势。该软件不仅提供了丰富的建模工具和专业的设计功能,还支持二次开发,使用户能够根据具体需求进行定制化操作。

kkchenjj的博客 1103

PHP下ORM的基本实现

服务端编程经常需要和数据库打交道,CRUD是基本的操作。数据对象是整个操作的中心,数据库的一条记录对应着一个数据对象的信息,ORM(对象关系映射)讲的就是如何优雅的把数据对象和CRUD结合起来。这里主要实现一个通用的ORM模块。首先看系统框图:     数据库记录到对象的转换中间有一个映射器,一方面映射器对数据库执行指令,另一方面抽象出一套接口供应用程序使用。在这里所有的数据对象都继承自

GentlyCare的专栏 4337

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

PHP ORM框架与简单代码实现——让OOP与关系数据库更融洽

对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 ORM提供了所有SQL语句的生成,代码人员远离了数据库概念。从一个概念需求(例如一个HQL)映射为一...

WEBCODE 579

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

TP中的orm

1、  什么是ORM (1)什么是ORM(Object  Relation  Mapping)对象关系映射 我们使用的数据库,是关联性的数据库(二维表,有行有列) 我们现在使用的编程语言---面向对象的 需求:可不可以将关联型数据库的数据  转换成  面向对象语言可以操作的对象类型的数据因为统一数据结构之后,操作起来非常方便 那么如何将关系型数据库中的数据变成面向对象语言能够操作的对象

whjwhja6的专栏 2670

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

php ORM 实现

<?php abstract class Model{ protected $pk = 'id'; protected $_ID = null; protected $_tableName; protected $_arRelationMap; protected $_modifyMap; protected $is_load = false; ...

Crazy_shark的博客 868

PHP的常见ORM特性初探

最近在跟着岁寒兄的博客尝试造个简单的轮子。由于平时也读不进去框架源码,所以顺便也算是第一次深入底层了解框架的原理。写到了M层的ORM这一块,没有找到一个中文的系统的说明常见ORM特性的帖子,所以准备整理下来,侧重点是Mysql和MariaDB,边学边记,给自己留一份底,也希望能给后来者一些帮助挖坑,慢慢填~

乱世之牙 1267

PHP ORM类进行封装

基于PHP简单的ORM实现(postgresql)http://xialluyouyue.iteye.com/blog/2237114 为了减少不必要的数据库查询,对数据库的影响,代码复制,我们需要更加智能方式实现ORM,需要惰性实例化,属性监控,代码可重用性,减少对底层数据库影响以及不必要主动查询的危险。 定义一个DataboundObject类,该类是一个抽象类,不仅提供子类不需要重新生...

xiaoluyouyue的博客 417

php orm 快速生成,一个快速构建PHP ORM类的工具:ORMBuilder

一个快速构建PHP ORM类的工具Requirement PHP 5.4 + (PDO support)Linux Shell / Windown cmdLast ChangeLog [2015-08-22] 版本调整为 v1.2.0 Beta调整生成命名逻辑,保持所有文件名/类名与驼峰命名一致增加U选项保持兼容选项L弃用调整部分处理逻辑及删除判断为冗余的代码修复其它一些已知的问题Comman...

weixin_34571972的博客 548

php中orm模型,模型model

## 模型model在看模型之前,我们先看一段yaf作者鸟哥在他自己博客里的一段文字吧:> 还有不少同学问, 为什么Yaf没有ORM, 这里有俩方面的考虑:首先, Yaf并不是万能的, 它只是解决了应用中, 最基本的一个问题, 就是框架带来的额外的性能开销, 然而这本部分的开销和你的应用实际的开销相比, 往往是很小的.但是, Yaf却代表着一种精神, 就是追求简单, 追求高效, 追求:”简单...

weixin_34470566的博客 403

ThinkPHP的orm和三大自动

M方法和D方法区别 orm create填充源码

pkgray的专栏 5380

php设计模式【工厂方法】- 伪代码 2021-04-18

最简单的理解工厂方法的伪代码 namespace Factory; // 工厂模式, 使用工厂方法、类 生成对象,不直接在代码里面 new class DB {} class Factory { static function createDB(...很多参数) { // ... 各种处理 $db = new DB; return $db; } } // 使用 Factory::createDB(); //好处: // 1. 工厂方法生成后返回的是一个生...

Silvercell 263

orm模型PHP,thinkphp5之orm分解,模型层详解

使用thinkphp5很长一段时间了,感觉thinkphp5的orm封装得还不错,在使用中也是非常的方便,可以说orm给我们写模型层提供很大的便利性,也就是直接提高了我们的开发效率和代码的可维护性。正是因为我们使用起来方便,正因为他的强大,而导致我们忽略了对底层实现,对面向对象理解得不够深刻,因此在一段时间里我便深入的看了下thinkphp5的orm,因此抽时间来总结下所得。如果你对以下疑问都了解...

weixin_30013175的博客 764

用PHP代码实现简单的工厂模式,用PHP代码实现简单的工厂模式

PHP代码实现简单的工厂模式方法1、定义抽象基类//家禽类abstract class Fowl{abstract public function eat();//吃方法}2、定义子类//牛类class Cattle extends Fowl{public function eat(){echo "我是牛,我吃草";}}//鸭类class Duck extends Fowl{public func...

weixin_29040367的博客 138
上一篇: 05、Vue3.x初步【应用 & 组件实例 & 生命周期钩子图】
下一篇: 01、认识数据库【数据库结构化查询语言】
银色种子
博客等级 码龄11年 8粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

银色种子

打赏 >100 请留言,并私信

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

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

打赏作者

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

抵扣说明:

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

余额充值