有人提出这样的问题:No PHP for large projects? Why not?这是一个反复出现的主题,PHP开发人员 - 有一些原因 - 被迫defend PHP。
所有这些问题都是有效的,并且有一些回应,但这让我思考。根据您可以用任何语言编写优秀代码和使用任何语言编写错误代码的原则,我认为值得提出一个积极的而不是消极的问题。我不想为什么你不能,而是想要如何将PHP用于大型项目。
那么,您如何编写一个大型,复杂,可扩展,安全且强大的PHP应用程序?
编辑:虽然我理解组织方面很重要,但它们适用于任何大型项目。我主要针对的是技术指导以及如何处理可扩展性的常见问题。使用像APC这样的操作码缓存是一个明显的起点。群集感知会话将是另一个。这就是我要做的事情。
答案 0 :(得分:20)
在大多数情况下,php的问题与语言不同。问题来自于低进入门槛的耦合和缺乏任何基础设施以避免常见的编程问题或安全问题。它本身就是一种非常快速和肮脏的语言。尽管如此,它仍然具有许多大型Web应用程序的优势。您只需要知道如何添加某种级别的基础结构,以避免许多常见的Web编程错误。请参阅 - What should a developer know before building a public web site以获取相关帮助。
您需要了解PHP可以使您的网络应用程序不安全或有问题的原因,并学习如何缓解这些问题。您应该了解如何使用php安全地访问您的数据库。您应该学习避免SQL注入。你应该了解像register_globals这样的邪恶事物以及为什么你永远不应该使用它们。简而言之,在进入真实世界的大型网络应用程序之前,您应该做好功课关于您的工具。
一旦受过教育,归结为你可能想要构建一个框架或使用一个可以缓解这些问题的预先存在的框架。流行的框架包括PEAR和Zend。
此外,有用的问题可能会有所帮助:
答案 1 :(得分:9)
将PHP用于大型项目与使用任何其他语言没有什么不同。在编写maintainable和extendable源代码时,您需要经验和知识。您需要了解security pitfalls和performance concerns。您需要对problem domain进行研究并熟悉它。
最后,与任何其他语言一样 - 您需要的是high-quality和well-motivated开发人员。
答案 2 :(得分:4)
我知道,这有点过时了,但是,我仍会试着回答...... 使用Haxe / PHP ...我可以深入研究细节...但是如果你看一下语言,它的功能,以及将PHP API封装成相当一致的东西的好方法,你很快就会看到,什么PHP的问题是......而且,最终你拥有Haxe的所有好处......
编辑:这是一个严肃的答案...... Haxe / PHP会自动解决帖子中提到的很多问题,标记为答案......
如果你想使用其他PHP框架,你只需要编写外部类,一切都会按预期工作......
我认为Haxe对“大”,“复杂”,“安全”和“强大”是一个非常好的答案......可扩展性当然不是来自Haxe本身......但是,如果你看看haxelib ,然后你发现很多东西,这将有助于可伸缩性...例如memcached(你将不得不将neko.net.Socket更改为memcached.Connection中的php.net.Socket)...
如果你真的想使用PHP语言,而不仅仅是平台,Haxe当然不会帮你...
答案 3 :(得分:2)
你可以像在任何其他语言或任何其他环境中那样做。
项目开发中有几个简单的步骤:
<强>组织强>;在开始编程之前,您需要组织所有内容,包括文档,uml图表和其他前期工作。
<强>结构强>;在开始编码和启动之前,您需要关注结构,这意味着您始终需要正确地执行此操作,而不是执行任何spagetthi解决方案。保持代码简单,评论很好。
这两点很简单,适用于所有开发领域,尽管有语言。保持简单和文档记录,您会发现在PHP中开发大型Web应用程序就像在ASP.NET,Ruby或其他任何地方一样容易。
然而,当我们进入开发阶段时,您需要获得一个好的IDE,使用一个好的数据库,使用一个repo。,获得一个MVC / Template系统,这可以在“Structure”中运行 - 但是。
作为一个侧面点,将应用程序拆分为不同的层:DLF(数据,逻辑,前端)。至少使用这三层,您会发现开发变得简单。
答案 4 :(得分:1)
使用Model-View-Controller框架。有人说,是的。而且,每个部分至少有一名工程师。
模型:您的DBA应该编写Model代码。不应该允许其他人编写SQL语句。
视图:具有最佳CSS和Javascript知识的人应该执行视图部分。他/她应该编写最少的PHP代码,他是使用PHP变量的代码。
控制器:她是真正的PHP编码器,也是后端服务器工程师,希望有或没有使用其他脚本语言。
答案 5 :(得分:0)
我使用CodeIgniter有很好的经验。我认为它只是重量轻,所以你可以下来和脏,但也增加了一个很好的MVC抽象层。考虑使用Doctrine ORM。示例:http://pampersmybabyregistry.com