PHP ORM框架Propel VS Doctrine
认识ORM其实最早源自一场争论,各个框架都声称具备良好的ORM实现,但是使
用后发现,如果仅仅是强制返回数据对象还声称自己是ORM的话,那就贻笑大方了。那只能说是伪ORM或是ORA(array)而已。很显然返回的对象除了
属性值外,还应该包括可执行方法,实现对数据的操作运用。
后来工作改用symfony
框架,该框架内置了对ORM框架Propel
和Doctrine
的
支持,symfony 1.2.*以前是采用propel作为默认ORM框架,symfony
1.3以后官方将默认ORM框架改为Doctrine。当然实际运用你可以自由切换,你也可以不用symfony直接在开发中采用Propel或
Doctrine。一番PK,最终在项目中采用了Doctrine作为默认ORM框架。
以下将对Propel和Doctrine的异同做一个简单对比,欢迎拍砖……
基本特性:
1)两者只需简单设置即可应用,支持常用CRUD操作;
2)两者均支持自动生成model,每个表生成两个model文件,也支持从原有数据库生成model;有些数据库数据类型转过来的属性类型可能不是完全一样,是一个最接近的类型;
3)支持数据有效验证和定义model关系;
4)支持单表继承,支持字段自动赋值;
5)支持主从复制;
6)Doctrine支持全文搜索
文档:
Doctrine的文档一直就比Propel要全面丰富,社区更活跃
使用方法:
Propel和Doctrine基本CRUD操作很类似,但是涉及条件操作时区别就比较大了
1)propel查询:
$criteria
= new
Criteria(
)
;
$criteria
->add
(
JobeetJobPeer::CREATED_AT
, time
(
)
- 86400
* 30
, Criteria::GREATER_THAN
)
;
$this
->jobeet_job_list
= JobeetJobPeer::doSelect
(
$criteria
)
;
2)doctrine查询:
$result = Doctrine_Query::create()->from("User")->where("name = 'caleng'")->excute();
明显可以看出Doctrine的连贯写法更加自然、更易阅读、更接近原生SQL。
性能:
Doctrine > Propel
关键字:orm、symfony
、doctrine
、propel
相关文档:
搭建PHP开发环境:
1、准备并安装下列软件:
MySQL 5.1.30: http://dev.mysql.com/downloads/。
Apache 2.2.14: http://httpd.apache.org/. 在安装过程中,会出现3个文本框,上面两个输入你的本机IP(如:127.0.0.1),最下面输入你的EMAIL ......
在网上找到2段PHP音乐播放程序,有空再完善一下,写个功能比较齐全的
测试运行环境:WindowsXP+APMServ 5.2.6
在CoreAmp PHP5.3.1上面运行要么无结果,要么运行不正常。-/\-
1。这个例子功能比较强大,将php文件上传到含有mp3歌曲的目录后运行,程序会自动寻找mp3歌曲并生成有歌手专辑等信息能下载能试听的静态页面。< ......
以下是本人的设置文件,希望对大家有用:
(注:版本为VIM7以上)
(再注:Ctrl+x,Ctrl+o自动补全;Ctrl+n变量补全)
(继续注:先将文件保存为.php才可使用自动补全,如果想更换语法提示,可以选择“语法->在菜单中显示文件类型->想用的语言,多的吓人)
默认支持的语言提示有:
C,CSS,html,javascript,php, ......
一、看手册,看手册,手册才是王道,http://www.sphinxsearch.com/wiki/doku.php?id=sphinx_chinese_tutorial
二、笔者建议采用SphinxSE,部署方便简单,程序改动较小,基本主要更改sql语句即可
三、重点说明:
1、如果要搜索中文,则需在配置文件conf里指定字符参数,eg:
charset_table = U+FF10..U+FF19->0..9, ......
//1. 用户密码六位数,不能大于六位而不能小于六数,数字值正则为[0-9],请用PHP写出有几种可能性,并做暴力破解;
function dePassword($pwd) {
$tmp = array('000000', '555555', '999999');
for ($i = 0; $i < 3; $i++) {
if ($pwd == $tmp[$i]) return $tmp[$i];
}
return $pwd < $tmp[1] ? getPwd(0, $pwd ......