java下边有Hibernate,php下边好像类似它的东西几乎没有,也有一些做orm设计的框架比如propel和AutoCRUD,但是和hibernate比起来肯定还有很多的不足。下边先分析下这两个框架。
propel设计几乎实现了orm的概念,也有数据库连接桥,兼容目前市面上大多数的数据库系统,主要是两部分系统构成,第一部分是配置文件生成工具(generator),第二部分是运行代码(runtime),配置文件模仿java的xml配置格式,从应用的角度来讲我觉得不是很满意,尤其对初学php的人来说是一个门槛,php是一个解释性语言,本身效率就有折扣,如果再加上解析xml的话,我个人认为没有必要,无意增加了系统的负担。
AutoCRUD设计应用的时候非常简单,不用做任何配置,生成的配置文件是php格式,这点我觉得是可以学习的,至少是符合我个人做配置文件的习惯,大家公认的一个缺点就是不能支持其他数据库,目前只支持mysql,实际上他还有一个问题,就是忽略了mysql的字符集,估计老外不存在乱码这个问题就给忽略了,目前大多数php应用还是和mysql进行搭档,所以说他的框架也能满足大多数人的需要,至于调用和原理和propel很类似,只是命名不相同而已.。我个人觉得他还有一个小小的问题,既然是不用做配置,也就没有必要安装那些代码,框架自身应该自动安装和写配置。这样的话开发应用者才能真正的透明。这个是框架默认的调用方式:
$crud = new AutoCRUD;
$result = $crud->connect ('root', '111111', 'project');
if (autocrud_is_error($result) == true) {
// error occured, find out what error
echo $result->getCode() . ': ' . $result->getMessage();
die();
}
if(!file_exists('./config/ormConfig.php')){
$code=$crud->generate(true); // 这里就安装autoCRUD的代码,第一次应用的时候生成配置文件代码,需要手 动写进配置文件,第二次的时候要做判断是不是配置文件存在,存在的时候就改成$crud->include_crud(fileName)
file_put_contens('./config/ormConfig.php',$code);
}
else{
$crud->include_crud('./config/ormConfig.php');
}
$articles = $crud->client->select();//读出client这个数据表
我个人觉得这些代码很多余,我想操作对象,至于对象是怎么来的,完全可以透明,所以我在使用的时候修改了他的构造函数,让构造函数来处理这些代码,增加了一个配置文件路径的属性$ormConfig。这样应用起来是不是更加简单了?上边提到的两个问题都已经处理,随后就会分享出来,我修改之后的代码,取消安装和数据库字符集。
现在的调用方式
$crud = new AutoCRUD('root', '111111', 'project');
$articles = $crud->client->select();
对于初学者我建议使用后边autoCURD,或者是我修改之后的版本,如果你的项目有可能之后进行数据库跟更换的话,我建议就用propel。zendframework中的,thinkPHP和fleaPHP中就不要用了,那些东西还很初级。会影响你对ORM概念的理解。
下载地址:http://code.google.com/p/jquerylab/downloads/list
使用帮助:http://lwp8407120426.blog.163.com/blog/static/464280752008105112544/