电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

常見 PHP ORM 框架與簡單代碼實現

瀏覽:35日期:2022-09-13 14:02:08

對象關系映射(Object Relational Mapping,簡稱ORM)是一種為了解決面向對象與關系數據庫存在的互不匹配的現象的技術。 簡單的說,ORM是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中。本質上就是將數據從一種形式轉換到另外一種形式。

ORM提供了所有SQL語句的生成,代碼人員遠離了數據庫概念。從一個概念需求(例如一個HQL)映射為一個SQL語句,并不需要什么代價,連1%的性能損失都沒有。真正的性能損失在映射過程中,更具體地講,是在對象實例化的過程中。

目前PHP 開源比較有名的 ORM 有以下幾個:

1、Propel

Propel是一個適用于PHP5的ORM映射(Object Relational Mapping)框架,它基于Apache Torque提供對象持久層支持。它通過XML格式的模式定義文件和相應的配置文件來生成SQL和類,它允許你使用對象代替SQL來讀寫數據庫表中的記錄。Propel提供一個生成器來為你的數據模型創建SQL定義文件和PHP類。開發者也可以十分簡單的定制生成的類,我們還可以通過XML, PHP類和Phing構建工具把Propel集成到已有的應用開發框架中去.例如PHP框架symfony的1.2以前的版本就是默認使用了精簡版的Propel作為默認ORM框架。

官方網站:http://www.propelorm.org/

2、Doctrine

Doctrine是一個PHP的ORM框架,它必須運行在>=php5.2.3版本上,它是一個功能強大的數據抽象層。

它的一個主要特征就是使用面向對象的方式來實現數據庫查詢的封轉,它底層通過一個類似 Hibernate HQL的DQL的查詢語句進行數據庫查詢,這使得開發的靈活性更強,大大減小了重復代碼。相比Propel,Doctrine的優點在于它支持支持全文檢索,Doctrine的文檔一直就比Propel要全面豐富,社區更活躍,而且使用起來更加自然、更易閱讀、更接近原生SQL。性能方面也略微優于Propel。同樣你也可以可以很方便的把Doctrine集成到現有的應用框架中去,比如PHP框架symfony的1.3以后的版本將Doctrine作為默認的ORM框架,同時也可以將Doctrine和Codeigniter整合起來。

官方網站: http://www.doctrine-project.org/

3、EZPDO

EZPDO是一個十分輕量級的PHP ORM框架。EZPDO的作者的本意旨在降低復雜的ORM學習曲線,盡可能在ORM的運行效率和功能之間做一個平衡點,它是我至今用過的最簡單的ORM框架,我目前還想將它集成到我的CoolPHP SDK中來,而且運行效率相當不錯,功能也基本能滿足需求,只不過EZPDO的更新比較緩慢。

官方網站:http://www.ezpdo.net/

4、RedBean

RedBean是一個易于使用,輕量級PHP ORM框架,提供對MySQL, SQLite&PostgreSQL的支持。RedBean架構非常靈活,核心也非常簡約,開發者可以很方便的通過插件來擴展功能。

官方網站:http://www.redbeanphp.com/

5、其他

國內的fleaphp開發框架基于TableDataGateway實現ORM實現;Zend Framework除了提供對 SQL 語句的封裝以外,也同樣實現了TableGateway、TableRowSet、TableRow的實現;還有一些類似Rails的ActiveRecord實現的解決方案。

總的來說,一般ORM框架對付簡單的應用系統來說都能滿足基本需求,可以大大降低開發難度,提高開發效率,但是它在SQL優化方面,肯定是比純SQL語言要差一些,對復雜關聯、SQL內嵌表達式的處理可能不是很理想。也許這主要是由于PHP本身對象持久化的問題,導致ORM效率過低,普遍比純SQL要慢。但是這些都是有辦法解決的,最基本的解決性能的方案,我們可以通過緩存來提高效率,Hibernate來說,雖然配置比較繁雜,但是它通過靈活的使用二級緩存和查詢緩存極大的緩解數據庫的查詢壓力,極大的提升了系統的性能。

如果你想自己實現一個PHP的ORM,下面的可以參考下:

<?phpabstract class Model{ protected $pk = ’id’; protected $_ID = null; protected $_tableName; protected $_arRelationMap; protected $_modifyMap; protected $is_load = false; protected $_blForDeletion; protected $_DB; public function __consturct($id = null){ $this->_DB = mysql_connect(’127.0.0.1’,’root’,’’) ; $this->_tableName = $this->getTableName(); $this->_arRelationMap = $this->getRelationMap(); if(isset($id))$this->_ID = $id; } abstract protected function getTableName(); abstract protected function getRelationMap(); public function Load(){ if(isset($this->_ID)){ $sql = 'SELECT '; foreach($this->_arRelationMap as $k => $v){ $sql .= ’`’.$k.’`,’; } $sql .= substr($sql,0,strlen($sql)-1); $sql .= 'FROM '.$this->_tableName.' WHERE '.$this->pk.' = '.$this->_ID; $result =$this->_DB->mysql_query($sql); foreach($result[0] as $k1 => $v1){ $member = $this->_arRelationMap[$key]; if(property_exists($this,$member)){ if(is_numeric($member)){ eval(’$this->’.$member.’ = ’.$value.’;’); }else{ eval(’$this->’.$member.’ = '’.$value.’';’); } } } } $this->is_load = true; } public function __call($method,$param){ $type = substr($method,0,3); $member = substr($method,3); switch($type){ case ’get’: return $this->getMember($member); break; case ’set’: return $this->setMember($member,$param[0]); } return false; } public function setMember($key){ if(property_exists($this,$key)){ if(is_numeric($val)){ eval(’$this->’.$key.’ = ’.$val.’;’); }else{ eval(’$this->’.$key.’ = '’.$val.’';’); } $this->_modifyMap[$key] = 1; }else{ return false; } } public function getMember($key,$val){ if(!$this->is_load){ $this->Load(); } if(property_exists($this,$key)){ eval(’$res = $this->’.$key.’;’ ); return $this->$key; } return false; } public function save(){ if(isset($this->_ID)){ $sql = 'UPDATE '.$this->_tableName.' SET '; foreach($this->arRelationMap as $k2 => $v2){ if(array_key_exists( $k2, $this->_modifyMap)){ eval( ’$val = $this->’.$v2.’;’); $sql_update .= $v2.' = '.$val; } } $sql .= substr($sql_update,0,strlen($sql_update)); $sql .= ’WHERE ’.$this->pk.’ = ’.$this->_ID; }else{ $sql = 'INSERT INTO '.$this->_tableName.' ('; foreach($this->arRelationMap as $k3 => $v3){ if(array_key_exists( $k3,$this->_modifyMap)){ eval(’$val = $this->’.$v3.’;’); $field .= '`'.$v3.'`,'; $values .= $val; } } $fields = substr($field,0,strlen($field)-1); $vals = substr($values,0,strlen($values)-1); $sql .= $fields.' ) VALUES ('.$vals.')'; } echo $sql; //$this->_DB->query($sql); } public function __destory(){ if(isset($this->ID)){ $sql = 'DELETE FROM '.$this->_tableName.' WHERE '.$this->pk.' = '.$this->_ID;// $this->_DB_query($sql); } }}class User extends Model{ protected function getTableName(){ return 'test_user'; } protected function getRelationMap(){return array( ’id’ => USER_ID, ’user_name’=> USER_NAME, ’user_age’ => USER_AGE ); } public function getDB(){ return $this->_DB; }}$UserIns = new User();print_r($UserIns);?>

標簽: PHP
相關文章:
主站蜘蛛池模板: 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | 网站seo优化_seo云优化_搜索引擎seo_启新网络服务中心 | 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 北京康百特科技有限公司-分子蒸馏-短程分子蒸馏设备-实验室分子蒸馏设备 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 无线联网门锁|校园联网门锁|学校智能门锁|公租房智能门锁|保障房管理系统-KEENZY中科易安 | 烟台游艇培训,威海游艇培训-烟台市邮轮游艇行业协会 | 棕刚玉-白刚玉厂家价格_巩义市东翔净水材料厂 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 苏州柯瑞德货架-仓库自动化改造解决方案 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 飞歌臭氧发生器厂家_水处理臭氧发生器_十大臭氧消毒机品牌 | 拖链电缆_柔性电缆_伺服电缆_坦克链电缆-深圳市顺电工业电缆有限公司 | 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | 100_150_200_250_300_350_400公斤压力空气压缩机-舰艇航天配套厂家 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | HEYL硬度计量泵-荧光法在线溶解氧仪-净时测控技术(上海)有限公司 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 硬齿面减速机[型号全],ZQ减速机-淄博久增机械 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 广州/东莞小字符喷码机-热转印打码机-喷码机厂家-广州瑞润科技 | 大白菜官网,大白菜winpe,大白菜U盘装系统, u盘启动盘制作工具 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 冷水机-冰水机-冷冻机-冷风机-本森智能装备(深圳)有限公司 | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | 铝镁锰板厂家_进口钛锌板_铝镁锰波浪板_铝镁锰墙面板_铝镁锰屋面-杭州军晟金属建筑材料 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | CPSE安博会 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 软文推广发布平台_新闻稿件自助发布_媒体邀约-澜媒宝 | 通风天窗,通风气楼,屋顶通风天窗,屋顶通风天窗公司 |