PHP框架新设想

Posted by linyupark :: 2007,October 15th,20:10 pm

研究了Zend框架的基层代码,并写了一个类似的框架,发现PHP的框架实现有其一定的弊端。

首先需要有统一的入口文件,这个完全是基于WEB服务器是否提供这项功能(地址重写).没了这个功能地址就必须写成http://…/index.php/…这样的形式,其实意思还是在于将请求锁定在index.php这个文件上。

这样可以减少反复调用相同类的麻烦,但现在很多空间商都不提供.htaccess的使用。有些甚至还不提供MYSQL_PDO。

所有这些都让Zend Framework看起来很美,真正想用,还需要这么些条件才可以用的舒坦。

其实现在很多PHP框架也都存在这个问题,不是判断REQUEST_URI就是获取GET值,然后在分配给相应的Controller这样比较起来貌似还是获取URI这个方法比较“好看”。

我一直在思考,PHP既然那么灵活,其实完全可以根据自己的需要将整个HTML分两次套用(骨架,零件)。这样可以真正做到代码的重用。

假设LIB目录下有一个放有HTML片段的TPL目录。其中可分为doctype,layout,bars,banners,contents这些目录,这些目录再分别存放具体的代码+以备替换的标签。

具体使用的时候分两次调用,首先是调用 doctype,实例后会输出类似:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=“http://www.w3.org/1999/xhtml” dir=“ltr” lang=“zh-CN”>

<head>{!–head–}</head>

这样的代码。实例给的参数不同,输出的文档类型也不一样。随后可以实例化head区域的内容,具体分为meta,link和title,可以在LIB下为它们制作类似。NET一样的控件,可改变其中的类型和值。然后替换输出的{!–head–}部分。随后的body也一样,可以从LAYOUTS里提取需要的布局类型进行实例化,再随之调用bar,banner。

当然这样做因为做了多次的替换,效率上会大大降低,但在代码重用上和与HTML分离上有很好的效果,我们把HTML元素都分割成了可调用的元件,这类似于。NET的控件调用,不同的是.NET需要在FORM的前提下,当然.NET是内置的,性能上更加出色。

但这样做想要效率上好一些也必须有一个统一的入口,但这个方面真的没什么好办法,可怜的PHP,它太灵活了,呵呵。

Leave a Reply