一个简单的 PHP 组件库思路

一个简单的 PHP 组件库思路

Chris Yue No Comment
Posts

最近做一个新项目,比较小,所以不打算用太复杂的框架,自己写一个。其实自己也有写框架的经验,没花多少时间就写出来一个能用的。代码直接拷出来违背了职业道德,但是把思路写出来应该是没有问题,也防止以后老了忘了怎么写。

框架核心分为

  1. application
  2. action
  3. configuration
  4. loader
  5. response
  6. exception

这几个部分。

首先loader是用来自动加载框架里面的各种类的。写loader算是工业标准了吧,主要方法是Loader::registerAutoload,利用spl_autoload_register方法注册库到上下文,一般是注册CLASS::load方法(自动加载的实现方法)。现在流行的PHP库文件几乎都会有这个东西,原理也比较简单就不叙述了。

中心是application,既是主体方法也用作上下文(context)。比较复杂的框架为了解耦会单独提出来,简单处理的话放在一起是没有大碍的。application作为唯一的singleton可在任何地方方便调用context里的成员。有的框架许多其他的组建也都会用singleton,因为他们考虑的会比较多,防止使用者肆意创造实例而破坏框架的设计。不过我这里是自己设计自己用,知道设计的使用规则。所以除了application其他的都没有用singleton,而是直接用application->getXXX的方式来调用。其它组件的构造函数必须要application实例作为参数,所以组建之间的调用也会因为application的存在而变得方便。application运行初期必须调用setConfiguration方法来使用配置文件初始化好所需要的配置。

configuration为管理配置文件类,也可使用set和get作为全局变量的parameter holder。配置文件的初始化包括一些application的设置,比如action的路径,template的路径等等。

action为行为的抽象类,有一个必须实现的execute方法,这个其实没什么好说的,action就是数据传输到response的桥梁。

response为相应类。在action可设置reponse要相应的http header以及content。setHeader,setTemplate以及setLayout方法等可以设置response需要响应的相应内容。利用flush方法可以把response的所有内容全部flush出去。利用ob_start方法以及ob_get_clean()可以实现布局效果————先把template的内容ob住,然后放在layout里面的$this->slot[‘_content’]变量里面。

exception为不同处理分成好几种exception。比如configuration exception以及404 exception等。

2011-12-06 20:24:07 更新:

今天我打算把标题改一下(之前叫《一个简单的php框架思路》),我的认知是框架这个东西主要指的是MVC框架,对于我现在写的项目来说,光有MVC是绝对不够的,所以我后来在原来的设计上做了一些调整:

库文件分为:

  1. configuration
  2. loader
  3. mvc
  4. exception
  5. dao(新加组建)

几个部分,之前说的reponse, application以及action被放在了MVC里面,另外还新加了MVC的exception,以及未来会考虑加HTTP的exception在里面,比如说Http404exception等。

这么分出来有一个好处:如果使用者只需要MVC的话,就可以直接把dao组件直接删除,反过来也一样。把loader和configuration单独提出来是因为方便其他组件的使用,当然有一个不方便的地方是,如果不清楚相互依赖关系的话,要精简组件库是很麻烦的一件事情。不过解决这个问题可以参考jQuery UI,做一个软件,先选择需要的组件,然后自动生成所选组件的文件以及依赖文件。

一个简单的 PHP 组件库思路 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人

发表评论

26 + = 35