如何打破“ PHP是一种不良语言”的范式?[关闭]


19

PHP并不是一门糟糕的语言(或者至少没有像某些人建议的那样糟糕)。在我告诉他们之前,我的老师甚至都不知道PHP是面向对象的。当我们说我们是PHP开发人员并质疑我们没有使用别致的语言和框架(例如Django或RoR)或“企业和实体”语言(例如Java和ASP.NET)时,我的客户立即不信任我们。

Facebook是基于PHP构建的。有很多可靠的项目为Web和Web提供动力,例如在企业和政府中使用的Joomla和Drupal。有些框架和库具有我在所有语言中都曾见过的最佳架构(Symfony 2,Doctrine)。PHP具有我所见过的最好的文档,以及许多专业人士。

PHP具有高级OO功能,例如反射,接口,更不用说PHP现在通过traits原生地和干净地支持水平重用。

有一些不好的程序员和脚本小子给PHP带来了不好的声誉,但同时又给PHP社区带来了强大的力量,而且因为很容易完成PHP,所以您常常会以错误的方式做事,理所当然,但是为什么要怪罪语言?。

现在,将其归结为一个实际可回答的问题:什么才是一个好的,扎实的,简短而又可爱的论点,以免被皱眉,避免一pre而就,当您说自己是PHP开发人员时捍卫自己的偏见?

(向有经验证据当场说服某人(客户或其他人)的人免费提供含奶油的曲奇)

PS:我们使用Symfony,代码的结尾是美观且可维护的

PPS:实写在PHP,经由街舞编译成C ++和部署在Hadoop。此处:http//arstechnica.com/business/2012/04/exclusive-a-behind-the-scenes-look-at-facebook-release-engineering/1/


9
首先,请在Programmers上标记所有过时的反PHP注释。主持人中至少有一位PHP开发人员真的很喜欢删除这些开发人员……
yannis 2012年

23
编写出色的PHP代码
Charles Sprayberry 2012年

42
请注意,当PHP人员引入“ FB是建立在PHP上”这个参数时,我真的很讨厌。就是说,它建立在像Hadoop这样的大型分布式系统上,真正完成工作的部分都在C中。PHP用于模板化和用户界面,这还不足以说“ FB是基于PHP构建的” ...
TC1

10
@NB是的,但是在这种情况下,恕我直言,说“ FB是基于PHP构建的”就像说StackOverflow是基于CSS和JavaScript构建的,“因为它在这里和那里都有一些不错的UI风格……
TC1

13
我不会雇用您,因为我不想维护PHP代码。PHP正在获得与Perl和JavaScript以及其他紧急语言一样的功能,但是它的核心设计很着急,因此无法改变。也许您应该考虑学习一些Django,RoR和Grails,因此与语言无关。
Job

Answers:


40

我唯一的答案是:一切都糟透了。

您会发现大量反对OOP与功能或过程编程相抗衡的争论(快速搜索将发现它们)。您似乎表明PHP的OO支持可以捍卫它。

Google 空白很烂,您将找到任何结果。 Python很烂红宝石很烂Rails很烂PHP很烂Java很烂

您想知道什么真的很烂吗?程序员。程序员很烂。任何优秀的开发人员都应该能够创建出色的应用程序(前端后端),无论使用哪种语言-即使他们不熟悉该语言!(也就是说,一个好的程序员应该能够有效地学习和使用任何语言)。

还要注意,应用程序的成功与代码无关。我听说Facebook的代码很糟糕,但是上帝是有效的。Wikimedia可能也是如此(Wikipedia建立在PHP上,也是一个非常受欢迎的网站)。真正重要的是结果!

PHP是我个人最熟悉的语言。我会为之辩护。我使用过PHP框架,PHP代码,PHP,python ruby(甚至Java)进行了Web开发。我不能说一个特别好于另一个。更重要的是开发人员和算法。我已经在许多语言中看到了非常出色且完全糟糕的代码(尤其是PHP,因为我接触了很多东西)。


现在您的问题:这取决于您与谁打交道

商人

他们最关心结果和成本效益。非常成功的Facebook,Wikipedia和Wordpress使用PHP的事实应该足以说服他们这是构建成功应用程序的有效语言。

程式设计师

让您的代码说明一切。如果开发人员说PHP在某种程度上是劣等的,请向他们展示一些您认为有效的PHP代码。吃的时候有布丁的证明。


8
“无论使用哪种语言,任何优秀的开发人员都应该能够创建出色的应用程序,无论前端还是后端,” –在Malbolge中尝试过后,请重复一遍。
Michael Borgwardt 2012年

5
我认为没有一个好的程序员可以用他不知道的语言编写好的代码。不错,也许,但不好。那是因为用任何一种语言编写好的代码都需要对库和语言本身有充分的了解。
svick 2012年

4
我不同意; 一个好的开发人员应该能够熟悉编写好的应用程序所需的知识。对库和语法的充分了解很重要,但这是一个好的开发人员可以轻松掌握的知识。即使语言是Malbolge,更困难的是算法和概念(可能还需要耐心)。也许我正在考虑一个伟大的开发人员。
爆炸药2012年

7
success of an application has nothing to do with its code<-是的。但是,当人们说“ PHP是一种不好的语言”时,他们并不是说“用PHP编写的应用程序是不好的”,而是说“用PHP编写的应用程序通常由于代码稀疏而无法使用”。可以肯定,有很多用PHP编写的应用程序。但是我认为这个答案并不能解决程序员称PHP为“坏”的含义。
Billy ONeal 2012年

2
@BillyONeal您对语言是“好”还是“坏”的指标是什么?应用程序无所不在..没有人关心代码。Linus Torvalds对C ++的糟糕程度大加吹嘘-您可以说任何不好的事情都是因为某些程序员在其中编写了不好的代码。
爆炸药2012年

20

PHP历史悠久。现在,即使是不久前,情况也要好得多,但是有一段时间,很长一段时间,很多不良做法和模式受到鼓舞,难以避免。仍然存在着一整代可怕的PHP代码,而且新程序员在阅读旧代码的过程中,他们正在学习不良行为。PHP现在可能不应该得到它的黑名声,但它无疑赢得了它。

捍卫PHP的最佳选择是谨慎地区分并从每个人都熟悉的历史中区分当前的技术水平。您可以说PHP不是一种糟糕的语言,但是如果您与从事该行业多年的人交谈,他们的记忆力就会告诉他们。

向他们展示PHP团队如何从错误中吸取教训,并改进语言。魔术报价和注册全球客户的日子已经一去不复返了。全局一切范式,安全模式和mysql_escape_string已不复存在。向他们解释真正的PHP程序员总是使用名称空间和参数化查询,他们避免使用不推荐使用的函数,并始终将其库代码放在文档根目录之外。

PHP已更改,PHP程序员已更改。这就是为什么PHP是今天的绝佳平台。此外,这是您知道客户将预先安装的唯一平台。好大

附带说明一下,我建议不要将现有的CMS引擎和框架作为PHP的一大赢家。您可能会冒着风险,指出四天前进行Websense安全性研究,结果表明94%的近期网站感染是针对运行Joomla和Wordpress等软件的PHP网站。那不是您想看到的那种公司。相反,指出你的代码会方式比所有其他的东西更安全。


1
+1-但是-但是-声称您的代码比一些专业人员进行的代码同行审阅“更加安全”,实际上不会给任何对安全性有半途而废的人带来很多帮助。每个人都写安全漏洞。诀窍只是将它们修复,比坏家伙领先一步。
Billy ONeal 2012年

@BillyONeal是的。最后一段是到让你觉得有点...奇怪,让你真正重新思考你的安全解决方案。我对PHP与非PHP Webapp的安全性进行了大量研究,并且报告令人不安地,严重地偏向于PHP。这并不是说PHP不好,但是安全性才是真正的问题。
tylerl 2012年

1
“而且,这是您知道客户将预先安装的唯一平台。”这句话对我来说似乎是完全错误的,不是每个部署的服务器都部署有LAMPhp堆栈,我尝试使用的任何常见Linux服务器发行版也没有预先安装了PHP。但是,我曾经使用过的每个Linux发行版都随附Python2.x。我怀疑某些常见的实用程序会依赖它。
ThorSummoner 2015年

9

PHP是网络的COBOL。两种语言都没有受到尊重,但是许多人以他们的生活来构建和维护系统,并以这种语言编写它们,并且它们几乎存在于本国的几乎所有主要计算机系统中(分别为Web和商业)。两种语言都被其他较流行的语言的从业者看不起,这主要是基于程序员的过时和过时习惯,他们从中学到了更好的知识并改进了他们的工具。

PHP应该很幸运,它可以活在COBOL的生活中。 除了FORTRAN之外,COBOL的存在时间已经超过所有事物,并且它不会很快消失。日常使用的许多COBOL程序要比维护它们的人老。可能不是“新热点”,但与之一起工作总是会赚钱。


4

我认为了解硬币的另一面并认识到PHP的不足可能也很有用。尽管PHP从模板语言中获得了许多进步,但仍有许多地方可以改进。在某些方面,PHP仍然缺乏:Unicode,功能特性,标准库的组织array等等。

我的建议是-为了就PHP的优缺点进行建设性的讨论-最好承认所有这些。“是的,我知道PHP标准库不是非常有条理。但是如果今天编写的,它可以利用名称空间和面向对象的API”。“是的,我知道默认数组会通过混合字典和数组结构而造成一些混乱。但是,如果希望获得更好的集合,可以使用SPL。”

如果您表明知道别人的论点是有原因的,您的观点就会变得更强。


2

为什么?

任何使您感到自己必须捍卫自己的人(无论是职业,配偶,消费习惯等)都在浪费自己的时间。您花时间捍卫自己只是在欺骗错误的人-现在您正在浪费自己的时间,以及他们的时间。

将这些人排除在您的生活之外-没有他们,您会更好。


4
因此,答案是将其个人化而忽略它?这是一个文化问题,我宁愿解决它,并尝试使我的论点更好,更简洁,以消除无知。
dukeofgaming 2012年

3
在真空中,我同意您的建议,但是PHP是不可辩驳的。尽管 PHP非常糟糕,但我始终对Mark Zuckerberg的成功感到惊奇:codinghorror.com/blog/2008/05/…–
Jim G.

1

您没有可以说服别人相信PHP及其开发人员的价值的简短而贴切的一句话,但是您在提出问题之前就写了一个非常令人信服的论点。


1

为了解决“ PHP是一种不良语言”的问题,您必须弄清楚为什么有问题的个人认为这是一种不良语言。也许他从事过用PHP编写的不良项目。也许他只是不喜欢在它们的变量前加上$。也许他们自己已经尝试使用该语言并编写了难以维护的混乱。来自其他编程语言的许多程序员看到PHP时都会一团糟,因为在PHP中有意义的东西在其他语言或其他平台上并没有真正的意义。例如,在PHP中,数组是“宇宙的通带”,用于完成几乎所有的事情,而在其他编程语言中,这样的事情是荒谬的。

我建议在这里结合答案。

  1. 正如tylerl所说,您必须证明现代PHP比它的旧表亲要好得多。的滋味消失了create_functioninclude到处手动呼叫的丛林已经一去不复返了。
  2. 确认PHP中存在错误。每种编程语言都有缺陷。否则,将使许多严肃的程序员完全忽略您的反应,成为“ fanboi”。
  3. 向人们展示在PHP中容易实现的东西,而在其他编程语言中则很难。编程语言旨在简化某些任务,这必然使其他任务变得困难。C?内存操作和位黑客真的很容易,语言真的很简单,但是维护大型应用程序很困难。Java的?没有free,一切都是“ OO-ish”的,但是运行时很长,OO可能会受到限制。C ++?使您可以使类型的行为与语言中的原始类型(例如int)完全一样,但是会带来大量的复杂性。PHP的?无需太多编程知识即可真正轻松地开始,但是结果是在互联网上发布了很多垃圾代码。
  4. 认识PHP的非语言优势。PHP中仍然有很多东西,因为它可能是一种令人讨厌的语言。但是它很容易配置,易于部署,并且附带了许多很棒的库,您可以将它们“插入”其中,而无需进行过多的工作。

每个语言都有一个地方。选择适合当前问题的语言,不要试图将首选语言塞入不属于该语言的地方。


1
-1:为什么要捍卫PHP?糟透了:codinghorror.com/blog/2008/05/…–
Jim G.

1
@JimG .:因为那是OP要求我做的。我在这里扮演恶魔的拥护者;我真的很讨厌自己使用PHP。但是,仅仅因为一个系统令人讨厌使用它并不意味着该系统没有任何好处。人们甚至可以从重大的失败中学习。:)
Billy ONeal 2012年

@BillyONeal为什么您讨厌使用它?自己决定事情。
约翰尼

@Johnny:通常,只是一种脚本语言,不适合构建大型系统。脚本语言非常适合快速原型制作,易于部署,并且在包装盒中附带了大型标准库。但是,由于无法执行编译时检查和约束,因此使用它们构建大型系统通常会导致无法维护的混乱。使得PHP灵活且适合脚本编写场景的事情(例如,未键入变量)使得使用一个组件由多个人来构建系统变得困难。
Billy ONeal

@Johnny:要澄清-我并不是说用PHP构建大型系统是不可能的-Facebook和Co.都证明这是很有可能的。仅仅它最终比提供更好的编译时语法和语义检查的语言困难。
Billy ONeal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.