课程咨询 :17156168575 QQ:2720475033

济南php培训 > 达内新闻 > PHP ORM框架与简单代码实现
  • PHP ORM框架与简单代码实现

    发布:济南php培训      来源:济南php培训      时间:2016-08-02

  • 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到底是用还是不用?”。

    Fancy个人的观点是:ORM要用!但关键部位不能用!因为对于一般的Web应用开发来说,使用ORM确实能带来上述的诸多好处,而且在大部分情况下涉及不到ORM的不好的地方。但是在系统里面有大数据量、大运算量、复杂查询的地方,就不要用ORM。ORM的性能问题将给你带来灾难。在这些地方就可以使用纯SQL或者其他简单轻量的DB Helper库了。在详细了解ORM之后,你就可以扬长避短让ORM发挥其最大效用了。

    济南达内php培训机构拥有强大师资力量,完善的的课程体系,与5万多家企业保持合作关系让你的就业有保障,我们的讲师都拥有10年以上的工作经验,开发类讲师都用于自己项目经验丰富,TTS系统建立使的学员随时随地都可以学习和复习。

    推荐文章

上一篇:济南达内php培训课:关于模板的原理和解析

下一篇:如何将mysql数据库中数据导入到solr4.5

最新开班日期  |  更多

PHP高级开发工程师就业班

PHP高级开发工程师就业班

开班日期:4月28日

PHP高级开发工程师周末班

PHP高级开发工程师周末班

开班日期:4月28日

PHP高级开发工程师就业班

PHP高级开发工程师就业班

开班日期:4月28日

PHP高级开发工程师周末班

PHP高级开发工程师周末班

开班日期:4月28日

济南:历下区山大路47号数码港大厦 济南:历下区趵突泉北路三联商社
青岛:市南区金坛路17号 潍坊:奎文区东风东街299号建行大厦
烟台:海港路25号阳光100城市广场 临沂:兰山区红旗路1号苏宁易购
淄博:张店区金晶大道68号华润大厦 济宁:市中区太白路10号苏宁生活广场
课程培训电话:17156168575 QQ:2720475033 全国服务监督电话:400-111-8989    服务邮箱 ts@tedu.cn

2001-2017 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56