|
武侠小说里常写,无招胜有招.大师们最终都要精通十八门武艺,然后最后学通一门,再融会贯通,突破前人,练就一招独门绝技.
我曾经折腾着要自己整文本数据库系统,自己整模板系统,自己整MVC框架.自己封装一堆操作,乐此不疲.
有一天我仔细地研究了Smarty模板的机制,突然良心发现,把我自己折腾的模板系统扔了.因为我发现,模板引擎的引入,初衷是简化表现层的操作,但最终 Smarty的语法,已经越来越像一个php,越来越像一个新的WEB脚本了.本来是两层,php引擎解释PHP文件,现在多了一层,php引擎解释 smarty引擎,smarty引擎又解释smarty模板.现在smarty的语法还在不断增加,扩展,他们正在努力在php语言的圣殿下,用 smarty造一个小房子.
于是我在做某个网站的两会专题时,文件架构是这样的:
/view.php
/model.php
/index.php
/config.php
view.php文件的第一行就声明了:global
$data;$data是一个多维数组,它的内容已经由index.php来产生.view.php中除开这一句之外,就只包含echo语句和foreach语句了.它们就负责一行行地输出data数组的内容。
index.php则是入口文件,它包含了config.php,model.php
,view.php.虽然不长,我还是给它实现了一个缓存功能.就是如果writable/cache.php文件存在且创建时间在10分钟以内,就直接包含cache.php并退出,否则调用wget将最新的网站显示内容读一份存到writable/cache.php中存起来.index.php是主要的执行文件.
config.php 则是几行配置信息,比如数据库信息啦之类.
model.php则是定义的函数的声明。其实这里也就三个函数.
现在我的工作完成了,余下的工作,就是告诉美工,要改的话,只需要修改view.php文件就行了.这个文件,随便改一下也没啥问题.
所谓的MVC,其实归根结底,就是可以做到如此简单.
所以,为什么要用smarty呢.如果要将logic和view分开,很简单,把文件一分为二,其中一个只管显示就行了。如果非要用if else 或是foreach,在smarty中也是要用的,我干吗要再去学smarty的关于if else 和foreach的语法呢,我直接在view.php中使用php标签就行了.
学透了以后,太多东西其实都可以这样来解决.cookie被认为是不安全的,所以往往一些系统设计了非常复杂的SESSION机制,还写大段大段的代码自行设计了加密算法.首先,加密算法有现成的可用的,没必要自己搞定.再者,看看wordpress,人家也直接在cookie存了用户名和密码.但普通人如果要在cookie中存,往往就存用户名和md5后的密码.但wordpress不这么干,人家把密码md5加密了一次,再用md5加密了一次.你不是说用户可能设置少于6位的密码吗?你不是说少于6位的密码几分钟就可以暴力破解吗?我现在两次md5加密.不就成千上万倍地增加了破解难度了吗?多简单的做法!
类.我不得不说一下这个.不知道为什么,人们在学会php5下的类操作后,就觉得不管什么,哪怕是写一个文件什么的,一定要封装一下.需知,OOP不是仙药,(原话应该人月神话中的:没有银弹.),OOP仍然不能解决一切,甚至不见得比Function式的编辑解决得更好.如果您决定了要写一堆 Class,那么事先告诉我,您保证您写成Class的初衷不是为了好看,不是为了让老板知道您会用class了.
还有一些仁兄们,喜欢把程序弄得非常好看,优雅.当然如果可能,好看一点的代码谁都喜欢.但是有很多时候,好看是以数倍的性能牺牲为代价的.我在一个短短的php文件中,看到有十个以上的地方使用了eval($variable)类似的语句.(之前看到霍炬的文章我不信,后来见到这份文件我信了).我能想出来的本来可以直接运行的代码非要放进eval中去执行的理由只有:可能这样好看一些.兄弟,如果您对好看与非很在乎的话,我建议您真的应该与您的美工换一换,这样也许能做出来一个很好看的网站!
有些东西,真不是越复杂越好.把php弄精,两点:多看手册,多问baidu/Google(为了避免卷入google还是baidu之争,我特意两个都写上,并在注意了排序).有时间骂Zend framework太庞杂,Xoops太老套,不如坐下来看看php手册. |
|