php框架-构建您自己的vs预制

php框架-构建您自己的vs预制,php,frameworks,Php,Frameworks,我正在用PHP构建一个应用程序,我正在尝试决定是使用codeigniter这样的预先存在的框架,还是构建我自己的框架。该应用程序需要真正的可扩展性,我想完全控制它,这使我认为我应该建立自己的,但同时我不想重新发明轮子,如果我不必 非常感谢您的建议 谢谢简短的回答是symfony2IHMO 原因是: 不要重新发明轮子 好的车轮比你的好(其他人是专业车轮制造商, 因为有很多时间) OSS框架可以扩展或修改,甚至只需要检查 首先或之后,您将没有时间维护自己的车轮 许多眼睛和手比2做得更好 当然,前

我正在用PHP构建一个应用程序,我正在尝试决定是使用codeigniter这样的预先存在的框架,还是构建我自己的框架。该应用程序需要真正的可扩展性,我想完全控制它,这使我认为我应该建立自己的,但同时我不想重新发明轮子,如果我不必

非常感谢您的建议


谢谢

简短的回答是symfony2IHMO

原因是:

  • 不要重新发明轮子
  • 好的车轮比你的好(其他人是专业车轮制造商, 因为有很多时间)
  • OSS框架可以扩展或修改,甚至只需要检查
  • 首先或之后,您将没有时间维护自己的车轮
  • 许多眼睛和手比2做得更好

当然,前面的几点对于一组非常小的专业框架是有效的!我最喜欢的是symfony2,但是有很多好的替代方案。

列出您的框架的需求(ORM、PHP5.3、PDO等)。然后迭代现有的框架,缩小范围,找到与您的需求相匹配的框架。然后看看代码库、文档、社区、项目活动——它是否感觉到您想要使用的东西?另外,要现实地考虑自己实现所有需求所需的时间——您想专注于构建应用程序还是框架?

决策非常简单明了。 如果你想学习并拥有完全的控制权,那就自己动手吧

如果你只是想快速赚钱,那就去买现成的吧。

虽然我过去构建了自己的CMS框架,并使用了定制(内部)通用php框架,但我会找到一个适合你的开发风格的活动框架,并使用它

除非您的主要产品/应用程序是框架。但似乎不是这样

您对控制和可伸缩性的关注应该应用到现有的许多框架中,为您提供一个适合您需求的选项的简短列表

当然,这不是一个“内部”vrs“公共”的问题,那么一旦你打了电话,就选择任何旧的框架。

要回答问题背后的问题,对于一个能够完全控制并能够合理扩展的框架(我不确定您需要如何扩展该框架),我建议使用Zend框架。您可以使用它的单个部分,重写您想要的内容,它远远不止是一个MVC实现

更新:一个使用Zend进行定制的快速示例。如果您不想使用他们的MVC堆栈,但需要一些东西来路由请求,您可以使用Zend的路由器库。如果您喜欢MVC堆栈,但讨厌路由器的工作方式,那么您可以实现接口并编写自己的路由器


这也适用于MVC堆栈外部。Zend有大量用于邮件、rss提要、缓存、身份验证、数据库等的库。使用您想要的,忽略其余的。扩展你想要的,大部分框架都是用接口/抽象/通用类分层的,如果标准功能不能满足你的需要,你可以在这些接口/抽象/通用类的基础上进行构建。

我在一家公司工作,该公司最初编写了自己的框架,由一个在这里工作的人构建。它仅用于一个项目。原因是我们很快就意识到,尽管它很聪明而且非常好,但是没有相关的文档。因此,如果我们雇用另一个开发人员或自由职业者,他们就必须学习

我们使用CakePHP运行了一段时间,这很流行,但看起来确实很混乱。我们最终选定了科纳帕。易于扩展,一些很好的文档(可能与其他文档不同),格式良好的代码(这意味着如果找不到文档,您可以快速了解发生了什么)。框架的编写方式使开发人员能够非常容易地了解和跟踪正在发生的事情。而我们在使用CakePHP时总是遇到麻烦

我认为滚动您自己的框架的唯一理由是您可能需要一些高度定制的东西。但是Kohana很容易扩展,你可以把它扔进去。如果你真的不想,你不必使用他们的压缩库


也就是说,有些项目我根本不需要框架,只是一些路由解决方案,比如GluePHP。因为使用一个完整的堆栈框架会有点过头

使用现有的框架

首先,从头开始创建一个框架意味着在时间和精力上的巨大投资。这个过程需要大量的尝试和错误,因为你正在设计一些既简单又强大的东西。对于每一个设计决策,您都必须问问自己,它将如何影响在您的框架上构建的每个未来项目

您可能会认为,您可以做出每个设计决策,并将其与需求进行权衡,就像您对任何其他软件项目所做的那样,但问题是您不知道自己的需求。您无法了解它们,因为框架应该能够在其域内完成几乎任何事情(或者能够扩展到几乎任何事情)。未来的项目a将需要能够做x。您的框架能允许这样做而不将其转换为意大利面条代码吗?如果项目b需要做y呢?如果项目c需要做z怎么办

你预测到一切了吗?

现在对此的正常反应是,如果某件事不起作用,你只需在将来改变它。毕竟是软件。然而,框架不像一个简单的应用程序。它应该有一个接口,一旦你将它暴露给将要使用它的软件,你就不能改变它。您可以扩展它,但不能更改它。因此,现在您必须考虑弃用方法、api版本和compa版本