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

在PHP中构建真正的面向对象框架,需要建议,php,oop,codeigniter,Php,Oop,Codeigniter,我一直在使用CodeIgniter框架,但是在学习了Java和一些很棒的特性,如接口、抽象类、包,以及PHP5也支持大多数这些特性之后,我准备毕业并在PHP中构建一个真正的OO框架,它使用了所有这些特性(包括名称空间),所以我可以设计出更优雅的设计 我想的是,不是系统中的所有东西都共享一个$this->对象,就像它在CodeIgniter中完成的一样,例如: $this->load->model('box'); $this->box->something(); 要加载框

我一直在使用CodeIgniter框架,但是在学习了Java和一些很棒的特性,如接口、抽象类、包,以及PHP5也支持大多数这些特性之后,我准备毕业并在PHP中构建一个真正的OO框架,它使用了所有这些特性(包括名称空间),所以我可以设计出更优雅的设计

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

$this->load->model('box');
$this->box->something();
要加载
模型并调用其
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();
   }
}

对于构建这个框架,是否有任何建议/建议,例如我需要框架的最小系统类、我应该拥有什么名称空间或任何其他功能?

构建技术框架需要大量经验(无意冒犯),而且已经有1000个CMS/基本对象(会话管理、ORM等)framworks/图书馆

与其浪费宝贵的时间(再次无意冒犯),不如:

  • 评估并选择更适合您需要的框架(有些框架具有非常好的OO体系结构)
  • 学习将使用这个好的框架
  • 构建您自己的OO业务/应用程序框架。(这是您可以学习、区分和创造价值的地方)

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

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

    选择接受参数的方式,并在这方面保持一致。您只接受参数还是参数的关联数组?选择并坚持它

    在你写任何东西之前,我也不会过度设计。在你需要重构之前,一致性问题会让你走得很远。。。但我也不怕这么做。(一两次单元测试可以缓解这些担忧)

    是的,只要你始终如一,做事就没有对错之分。我有没有提到


    保持一致

    您可以构建自己的库,但为什么不利用框架提供的大量库,并在需要时扩展它们的功能呢

    为什么不看看Zend框架呢

    它的入门速度相当快,包括许多有用的库和类作为标准。如果你只是想获得更多的OOP经验,那么这对个人项目是很好的

    我想看看。它来自于Codeignator,加载模型等就是按照您提出的方式完成的

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

    科哈纳有什么不同

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

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

  • 不要因为想要使用OOP而使用OOP,在有意义的地方使用它,而不要在其他地方使用它。这对于PHP来说尤其如此。您正在进行一项巨大的工作,这项工作已经做得很好,并且得到了许多其他人的支持。我建议您将这巨大的精力投入到开发很棒的应用程序中,或者做一个与普通MVC截然不同的框架。这只是一个从事框架/平台设计10年的人的建议。或者,换成Python,你就再也不会回头了(眨眼)。为什么不看看一些Java MVC框架,看看它们是如何工作的呢?例如,Spring…我建议您使用比PHP更多的OO语言(如Ruby或Python)。一个只包含业务逻辑的框架。Take stackoverflow:构建/扩展框架以