大型项目没有PHP?为什么不?

时间:2008-12-21 23:42:15

标签: php scalability projects

我已经阅读了一些帖子,其中有人说过(不建议,未讨论,未提供)PHP不应该用于大型项目。

作为一名主要的PHP开发人员,我提出两个问题:

  1. 什么定义了“大项目”?
  2. 为什么不呢?使用PHP的缺陷是什么?
  3. 我经营一个小型开发团队,我从经验中了解质量建设,组织,文档,评论和封装是我们的首要任务。我们能够使用自己的框架和方法开发出色的项目,但是,如果我浪费时间,我不想进一步投资。

    思想?

11 个答案:

答案 0 :(得分:90)

当人们断言PHP是一种糟糕的语言时,我真的很讨厌它,因为你可以编写将表示与逻辑混合的代码,或者它允许你允许SQL注入。 这与语言没什么关系,那就是开发人员。

PHP已经证明自己具有高度可扩展性:维基百科是互联网上最大和最受欢迎的网站之一,它运行PHP。够了吗?

有很多工具/库可以为你提供一个工作框架,使得人们不太可能编写糟糕,维护较少的代码:参见CakePHP,Symfony,PDO,Smarty等等。

它收到了一个糟糕的说唱,因为它是一种入门门槛很低的语言:它是免费的,你可以得到非常便宜的PHP托管, the documentation is the best there is ,这里有很多教程,加上它使很多事情变得非常容易(例如:打开一个URL并获取文件的内容:file('http://www.google.com');)。这意味着很多新手都会选择它,并用它制作了很多非常狡猾的网站,但这种情况会随着你选择的第一种语言而发生。

使用一个可靠的ORM框架(关于哪个最好的问题大约有30个问题),它会对你好。

答案 1 :(得分:30)

很多不说使用它的人真的说不要使用PHP 4.它归结为这个

您可以用任何语言撰写优质代码

您可以使用任何语言编写错误代码

PHP经常会让自己成为纠结的意大利面条代码库,并使你的“应用程序”真正只是一系列脚本(请参阅Moodle,以此作为一个很好的例子......)

我认为很多'不要将PHP用于大型东西'来自于PHP被其原始目的所摧毁:一种模板化语言。我可以理解,但有很多项目证明你可以做到(Drupal,mediawiki,Facebook)。

答案 2 :(得分:18)

没有理由你不能将PHP用于大型项目。毕竟,Facebook建立在PHP之上。但是会出现问题,但任何大型项目都存在问题。

让PHP如此普及的原因在于进入门槛低且廉价托管。它作为Apache扩展运行,你几乎可以开始编码。如果你去更多的企业平台,如.Net或Java,他们有更高的入门门槛,但他们也有很多基础设施,可以帮助你制作可扩展的应用程序。

例如,PHP中的数据库抽象是(imho)可悲的。它是特定于供应商的。使用MySQL,人们倾向于做以下事情:

function get_users($surname) {
  mysql_query("select * from users where surname = '$surname'");
  ...
}

这有几个原因很糟糕:

  • 很难使用查询缓存;
  • 它不处理字符的转义(当然,可以使用mysql_escape_string()来处理,但是你会惊讶于人们不经常这样做);和
  • 以允许SQL注入攻击的方式编写代码相当容易。

我个人更喜欢mysqli因为上述所有原因,但它有自己的问题:即使用LONGTEXT字段崩溃mysql并且至少从2005年开始仍然没有修复(是的我和其他几个人已经提出了一个bug)。 / p>

将此与Java(我更熟悉)相比较,而JPA或Ibatis是具有更高启动成本的更好的ORM解决方案,但它们将在企业范围内为您提供帮助。

因此,您不会被禁止在PHP上执行大型项目。更难的是你必须自己做越来越多的工作来复制其他平台为你提供的东西。

话虽如此,PHP + memcached / APC + beanstalkd还有很长的路要走。

哦,这是另一个问题:PHP并不真正支持后台处理或线程。您需要其他东西(或独立脚本)。如果您正在使用其他东西,为什么不将它用于Web内容(例如Java,Ruby,.Net等)?

答案 3 :(得分:16)

答案 4 :(得分:4)

对我来说,最糟糕的PHP罪恶是表现与业务逻辑的结合。这并不是说你不能以更好的方式写它,但它并不鼓励你,如果它鼓励你不这样做。

大量安全漏洞也与PHP网站相关联。我无法证明它是不成比例的(毕竟很多网站都是用PHP编写的),但我怀疑它是。如果我是对的,那么由于安全漏洞是一类漏洞,我怀疑PHP网站整体上也有更多的错误。

(我不认为指向一些大型网站,并说他们设法在PHP中做到这一点,顺便说一下。这有点像说香烟不会导致癌症,因为你的下一个门邻居抽烟,活到100岁。)

答案 5 :(得分:2)

查看这个类似的问题 - Can PHP handle enterprise level sites as well as Java

重新封顶 - Facebook,维基百科,Yahoo.com,Digg,Flickr以及许多其他大型网站都在运行PHP。如果你已经接近制造这种水准的东西,你仍然可以放心,你可以通过PHP实现目标。

您的应用程序的可维护性,可扩展性,可靠性,安全性和高性能完全取决于您,并且与语言无关。不过有利于PHP,它有非常方便的工具来构建Web应用程序。

答案 6 :(得分:2)

对我来说,谈论大型甚至是大型项目时,它(主要)归结为一个词:依赖性

脚本语言的问题就像世界上的每一件事一样:最大的优点是同时也是最大的劣势。

最大的优势是免费和快速编码。只需编写一个脚本,它就会为它服务。不需要冗长,只需编码。

在某种程度上,最大的缺点是检查此脚本是否不会干扰其他脚本。或者更好:更改其他人依赖的旧脚本。您确定所有依赖项都可以按照您的需要运行吗?

对于“普通”网页生成,这不是正确的,无论这里的正常方式如何。但我们的产品依赖于大约500k行的源代码,客户端的定制也包含额外的10万行代码。而且我很高兴编译器检查所​​有依赖项并在我做错的情况下警告/错误(例如,在这里说最低级别,错误地输入变量或方法)。

我认为这和其他语言本质上提供更简单易用的“企业”功能(即“银行使用”的应用程序服务器)的事实归结为为什么许多人没有看到大的PHP(或更好) :巨大的)项目。

答案 7 :(得分:1)

PHP语言的构造对我来说还不够好。 例如,函数的名称。这是一种非最佳实践,使用多种方法来命名一种语言的函数。下划线(function_name),单词粘在一起(functionname)等之间的混合,我的意思是,这真是一团糟。有太多的功能非常相似或做同样的事情,但他们的名字是如此令人困惑。这不是一个好的编程语言的特征。

在大型部署中,语言必须足够简单且特定于编写。 PHP省略的东西就像变量类型的声明一样,后来变得非常难以理解和处理。

其他方面是不断添加功能和取消其他功能。它假设在PHP 5中添加OOP会使程序员更容易,但是对后兼容性的考虑呢?

这种编程语言的主要原因是它的起源:个人主页。它不是为大型部署而设计的。

我知道有很大的努力使这种语言成为企业级语言,而且就个人而言,我正在等待一个足够好的开源服务器端编程语言;但直到这一天到来,它将在桥下运行大量的水。

答案 8 :(得分:0)

我们公司使用PHP运行几个大型网站,并且没有与该语言相关的问题。

答案 9 :(得分:0)

这些都是很好的答案。

我是个新手。我只编写了5年的代码,但我直接支持和管理了85个小到大的网站,我会告诉你什么,通过让网站停顿一天而被起诉的可能性将对你的学习欲望产生很大影响如何制作更好的代码。

很高兴听到老牌开发者分享他们对此事的看法。我不认为PHP是最好的,但似乎我对“最佳实践”的投资很好。

谢谢大家!

答案 10 :(得分:0)