正在加载...

迷惘不是最终目的,目的是要提高~
于是,把ThinkPHP的源代码看了一遍。说是看了一遍,其实远远不是,大概的看了一遍,把它的文件结构已经一些实现方法看了一遍。
说句实话,真的是获益匪浅啊!!!
至少,与我而言,是肯定不可能写出那样子的代码出来的!为什么?条理真的很强。一个ThinkPHP1.0.3的核心包总共的文件只有76个文件,其中真正使用到的还没有这么多!大小也不过1M多一点点(PS:其中有不少是注释的内容)!从ThinkPHP.php文件来分析看一下的话,其实真正实现了MVC的方法关键也不过是一下几个文件,App.class.php(整个ThinkPHP运行的过程)、Model.class.php(最大的一个文件,3000多行,完美实现了Model的定义以及常用方法)、Action.class.php(实现了Action的定义已经对于Model的使用方法),View.class.php(模板操作,实现接口功能,比如Smarty的接口),Dispatch.class.php(实现了路径的解析),Route.class.php(路由功能的实现),functions.php(将上述文件中需要的功能全部封装),defines.php(常量定义),convertion.php(RoR中很重要的惯例的概念)。至于其他的Db类、Filter类什么的在整个运作中实现了数据库连接、过滤器调用(其实,这个我觉得过滤器的名称还是怪异的,我看了半天,觉得其实作用就是针对一种操作的不同种类的选择,比如Cache中的MemCache、DBCache、FileCache几种类型,Cookie中是用File还是DB等等的选择,所以觉得是不是改名选择器好一点?个人看法),起到了辅助的作用。还有一些ThinkAjax之类的就没有看了,主要是觉得还需要学习一个新的类库,现在有protype、JQuery等等选择,所以就略过没有看。
从上面的分析看一下,其实TP的框架结构真的是非常清晰,将MVC完全放在了分属的三个文件中,Dispatch和Route也是同样。需要使用的方法没有在各自所属的文件中单独定义,而是定义在了一个公用的functions.php中,是的核心部分不会显得冗余(当然,每个部分的专属功能还是写在了各自文件中,比如Model的_query、_delete等等,毕竟这个是输入Model的一部分)。然后对于常量定义和惯例配置也是写在了各自文件中。好处是以后如果需要修改,那么只需要修改各自的文件,而不需要去特定文件中进行修改。然后在所有的MVC、dispatch、route工作做好之后,使用App.class.php将这一切联系在一起,最终完成了框架的运作!
其实还不只是这些,单纯的一个THINK_PLUGIN_ON的常量固定了是否可以打开插件(PlugIns目录中),如果有,那么读取其目录下的文件并进行操作(暂时用的比较多应该是模板插件)。在其Vender目录中可以导入其他的一些类库,比如PERR之类,一定程度上也增强了TP的扩展性,毕竟TP需要实现的是一个框架而不是所有。PEAR这种纯粹的类库配合TP应该说是定位很准的操作方法!
总的来说,TP的编码确实是非常优秀的编码,将PHP这种不纯的OO写出一个尽可能OO的框架,已经是非常的棒了~加上TP的优秀的开发文档,完善的API文档,应该会成为不少PHP开发人员的首选框架。

: http://www.breestealth.com/76/thinkphp_code_read_complete.html

本文相关评论 - 才 2 条评论
melon
2008-05-30 08:25:33

findAll();
$this->assign(”category”,$cate);
这串代码里,$Cate->findAll();按函数理解是找出所有值再赋给$Cate,我不明白的是,它在哪里找出所有值,没见多余代码说明。请老大赐教!