在PHP中构建一个真正的面向对象框架,需要建议

时间:2009-10-02 21:39:35

标签: php oop codeigniter

我一直在使用CodeIgniter框架,但是在学习Java和很棒的功能(如Interfaces,Abstract classes,package)之后,PHP 5也支持大多数这些功能,我已经准备好毕业并构建一个 PHP中的真实 OO框架,它使用所有这些功能(包括名称空间),因此我可以构建更优雅的设计。

我在想的是,系统中的所有内容都不像CodeIgniter中那样共享一个$this->对象,例如:

$this->load->model('box');
$this->box->something();

您可以执行以下操作来加载Box模型并调用其something()方法。

$box = new Framework\Models\Box();
$box->something();

或以下

abstract class BaseController
{
   public function getModel($name)
   {
      $model = new Framework\Models\$model(); //Is this valid code?
      return $model;
   }
}

class MyController extends BaseController
{
    public function index()
    {
        $box = $this->getModel('box');
        $box->something();
   }
}

是否有任何关于构建它的建议/指针,例如框架需要哪些最小系统类,我应该具有哪些命名空间或任何其他功能?

4 个答案:

答案 0 :(得分:11)

我注意到的一件事是,框架通常是为特定目的而构建的。通用框架(如CodeIgniter)适用于较小的站点,可以快速启动和运行。然而,一旦你有了特定的东西,这些东西不属于通用框架,你自己的构建就会成为现实。

我唯一建议的是保持一致。这是无情的一致。如果您决定在camelCase中命名,那么请不要偏离。或者,如果您决定使用NounVerb命名方法约定,即spaceJump,那么即使它当时听起来更好,也不要切换到jumpSpace

选择接受参数的方式并保持一致。您是否只接受参数或参数的关联数组?选择并坚持下去。

在你写任何东西之前我也不会过度工程。在你需要重构之前,一致性事情会带你到很远...但我也不会害怕这样做。 (一两个单元测试可以减轻这些担忧)。

是的,只要你保持一致,通常没有正确或错误的做事方式。我提到了......

保持一致!

答案 1 :(得分:5)

构建技术框架(没有冒犯)需要很多经验,而且已经有1 000个CMS /基础对象(会话管理,ORM等)framworks / libraries。

而不是浪费宝贵的时间(不再冒犯),你最好不得不:

  1. 评估并选择更适合您需求的框架(有些框架具有非常好的OO架构)。
  2. 学会使用这个好框架。
  3. 构建自己的 OO 业务/应用程序框架。 (这是您可以学习,区分和创造价值的地方)。

答案 2 :(得分:4)

您可以构建自己的,但为什么不利用可用框架中包含的庞大库,并在必要时扩展其功能。

你为什么不看看Zend框架。

入门起来相当快,并且包含许多有用的库和类作为标准。如果你只是希望获得更多的OOP经验,这对个人项目来说是好事。

http://framework.zend.com/

答案 3 :(得分:3)

我会看Kohana。它来自CodeIgnitor,加载模型等就像你提出的那样完成。

查看他们的核心功能,其中许多功能与您的问题直接相关(我已经强调了这些功能):

Kohana如何与众不同?

虽然Kohana重复使用了许多常见的设计模式和概念,但有些东西使Kohana脱颖而出:

  1. 社区,而非公司,驱动。 Kohana的发展是由一群需要快速,强大解决方案框架的专职人士推动的。
  2. 严格的PHP 5 OOP。提供许多好处:可见性保护,自动类加载,重载,接口,摘要和单例。
  3. 非常轻巧。 Kohana不依赖于PECL扩展或PEAR库。避免使用大型单片库,以支持优化解决方案。
  4. GET,POST,COOKIE和SESSION数组都按预期工作。 Kohana不限制您访问全局数据,但提供过滤和XSS保护。
  5. 真正自动加载类。按照您的申请中的要求,按需加载课程。
  6. 没有命名空间冲突。所有类都带有后缀,以允许组件之间具有相似的名称,以获得更一致的API。
  7. 级联资源提供无与伦比的可扩展性。几乎Kohana的每个部分都可以重载或扩展而无需编辑核心系统文件。模块允许将多文件插件透明地添加到您的应用程序中。
  8. 库驱动程序和API一致性。库可以使用不同的“驱动程序”来透明地处理不同的外部API。例如,可以使用多个会话存储选项(数据库,cookie和本机),但所有这些选项都使用相同的接口。这允许为现有库开发新的驱动程序,从而保持API的一致性和透明性。
  9. 强大的事件处理程序。观察者风格的事件处理程序可以实现极高的定制潜力。
  10. 快速开发周期。快速开发可以更快地响应用户错误和请求。