前往顾页
以后地位: 主页 > 收集编程 > Php实例教程 >

PHP ORM框架与简朴代码实现 ORM究竟是用还是不消?

时候:2015-11-04 21:15来源:知行网www.zhixing123.cn 编辑:麦田守望者

ORM即Object/Relation Mapping的简写,一般称作“工具关系映照”,在Web开辟中最常出没于和关系型数据库交互的处所。接口、中间件、库、包,你都可以这么称呼它。

我们可以连络PHP和MySQL,从ORM的四个核心思念来熟谙它:
◾简朴:ORM以最根基的情势建模数据。比如ORM会将MySQL的一张表映照成一个PHP类(模型),表的字段就是这个类的成员变量
◾切确:ORM使所有的MySQL数据表都遵循同一的标准切确地映照成PHP类,使体系在代码层面保持精确同一
◾易懂:ORM使数据库布局文档化。比如MySQL数据库就被ORM转换为了PHP法度员可以读懂的PHP类,PHP法度员可以只把重视力放在他善于的PHP层面(当然可以或许谙练把握MySQL更好)
◾易用:ORM的避免了不标准、冗余、气势不同一的SQL语句,可以避免很多报酬Bug,便利编码气势的同一和后期保护

 

接上去再经由过程一个很根基的例子来讲明一下ORM的利用,还以PHP和MySQL为例。

user这个数据模型是再遍及不过的了。假定我们有一张user数据表,布局如图:

在OOP中凡是我们需求写一个对应的class User来作为user数据表的数据模型:
// 声明class User
class User{
$id;
$name;

function create(){/*...*/}
function load($id){/*...*/}
}

// 利用class User
$user = new User();
$user->name = 'fancy';
$user->create();

但是经由过程ORM,我们可以不消去声明class User,可以直接继承ORM供应的工厂类,比如:
// 直接利用!对熟谙MVC的亲晓得这个意义之地点!
$user = new ORM('user'); // ORM都有本身的法则,这里直接利用了MySQL的表名
$user->name = 'fancy'; // MySQL的表的字段就是$user工具的成员变量
$user->save(); // 失落用ORM供应的接口函数

ORM一般都针对数据模型供应了一下常见的接口函数,比如:create(), update(), save(), load(), find(), find_all(), where()等,也就是讲sql查询全数封装成了编程说话中的函数,经由过程函数的链式组合天生终究的SQL语句。

所以由这些来看,ORM对敏捷开辟和团队合作开辟来讲,好处是非常非常年夜的。这里就枚举一下我想到的ORM明显的长处:
◾年夜年夜收缩了法度员的编码时候,减少乃至免除对Model的编码
◾杰出的数据库操纵接口,使编码难度降落,使团队成员的代码变得简练易读、气势同一
◾静态的数据表映照,在数据表布局乃至数据库产生改变时,减少了呼应的代码点窜
◾减少了法度员对数据库的学习本钱
◾可以很便利地引入数据缓存之类的附加服从

 

但是ORM其实不是一个完美的东西,它同时也有其本身不成避免的错误谬误:
◾主动化进行关系数据库的映照需求耗损体系机能。其实这里的机能耗损还好啦,一般来讲都可以忽视之,特别是有cacha存在的时候
◾在措置多表联查、where前提复杂之类的查询时,ORM的语法会变得复杂且鄙陋
◾越是服从强年夜的ORM越是耗损内存,因为一个ORM Object会带有很多成员变量和成员函数。有一次修复bug时就遇见,利用ORM查询的时候会占用12MB的内存,而利用SQL的查询时只占用了1.7MB……

 

ORM就是这么一个让人又爱又恨的东西。回到我们开端的问题:“ORM究竟是用还是不消?”。


小我的观点是:ORM要用!但关头部位不克不及用!

因为对一般的Web利用开辟来讲,利用ORM确切能带来上述的诸多好处,并且在年夜部分环境下触及不到ORM的不好的处所。但是在体系内里丰年夜数据量、年夜运算量、复杂查询的处所,就不要用ORM。ORM的机能问题将给你带来灾害。在这些处所便可利用纯SQL或其他简朴轻量的DB Helper库了。在详细体味ORM以后,你便可以取长补短让ORM阐扬其最年夜功效了。

------分开线----------------------------
标签(Tag):php php教程 php实例教程 php5 php源代码 php根本教程 php技能 php6
------分开线----------------------------
保举内容
猜你感兴趣