代码之家  ›  专栏  ›  技术社区  ›  Ali

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

  •  4
  • Ali  · 技术社区  · 15 年前

    我一直在使用CODENIGITER框架,但是在学习了Java和诸如接口、抽象类、包等令人敬畏的特性之后,PHP 5也支持了这些特性中的大部分,我准备毕业并建立一个 真实的 PHP中的OO框架使用了所有这些特性(包括名称空间),因此我可以构建更优雅的设计。

    我想的是,不是系统中的所有东西都共享一个 $this-> 类似于在CodeIgniter中完成的对象,例如:

    $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 回复  |  直到 15 年前
        1
  •  3
  •   Chris Domigan    15 年前

    我会看看 Kohana . 它来自于代码点火器,加载模型等都是按照您提出的方式完成的。

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

    科哈纳有什么不同?

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

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

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

    我唯一的建议就是保持一致。这是始终如一的。如果你决定用camelcase来命名事物,那就不要偏离这一点。或者,如果您决定使用命名方法的名词-动词约定,即 spaceJump 那就不要切换到 jumpSpace 即使在当时“听起来”更好。

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

    在你写任何东西之前,我也不会过度设计。在您需要重构之前,一致性这件事将花费您相当长的时间…但我也不会害怕这样做。(一两次单元测试可以缓解这些恐惧)。

    是的,只要你始终如一,通常没有正确或错误的做事方式。我有没有提到…

    要始终如一!

        3
  •  5
  •   Toto    15 年前

    建立一个技术框架(没有冒犯)需要大量的经验,并且已经有1000多个CMS/基本对象(会话管理、ORM等)框架/库。

    与其浪费宝贵的时间(不再冒犯他人),你最好:

    1. 评估并选择更适合您需要的框架(有些框架具有非常好的OO架构)。
    2. 学习将使用这个好的框架。
    3. 建立你的 拥有 面向对象 业务/应用程序 框架。(这是学习、区分和创造价值的地方)。
        4
  •  4
  •   Andrew    15 年前

    您可以构建自己的库,但是为什么不利用可用框架中包含的大量库,如果需要,还可以扩展它们的功能。

    为什么不看一下Zend框架呢?

    这是相当快的开始,包括许多有用的库和类作为标准。如果你只是想获得更多的OOP经验,这对你的个人项目是有好处的。

    http://framework.zend.com/