목차
回复内容:
백엔드 개발 PHP 튜토리얼 为什么在知乎 php 被黑的最惨烈?

为什么在知乎 php 被黑的最惨烈?

Jun 06, 2016 pm 04:41 PM
java php web xml

在编程话题经常看黑php的,而且也是排名黑最靠前的。php和java都学过,用的感受是web方面,php搭建起来很方便,很多方法直接用;java的xml配置反倒很啰嗦,算不算惊艳?222

回复内容:

作为有8年多的PHP编程经验的老司机,客观说一句,在Web开发领域,PHP是一门非常不错的语言,事实不以人的意志为转移。PHP有它不足的地方,但是它一直在持续完善和发展。

如果大家有留意过《TIOBE世界语言排行榜》,PHP曾经排名更前,2010年的时候,曾经一度排名到第3名,而现在大概在第6名(2016年2月)。
为什么在知乎 php 被黑的最惨烈?
语言排名的下降,个人认为不是因为使用的人变少了,而是领域更细分了,例如新增加的移动端开发,就改变了很多编程语言的占比。

PHP很简单,很容易学习,例如:
(1)屏蔽了内存管理、指针等比较复杂的语言特性。
(2)甚至屏蔽了变量类型的复杂性。
(3)PHP的环境搭建很简单,郎朗上手。
... ...

什么样的东西,能让人印象深刻的记住呢?
对于工作多年的老程序员,我们曾经在大学学习过的《汇编语言》,还能记得多少?(假设不从事相关的工作哈)或者C/C++,如果不从事相关开发,又还记得多少?
但是,如果学习PHP过的人,通常还能记得不少,因为PHP的基本语法压根就没有多少东西哈!


简单的东西,通常不容易被人忘记。

早期,很多人批评PHP的语言特性不完整,例如没有命名空间(Namespace),更早PHP4说面向对象不完整等等。还有一些人,批评弱类型,认为变量类型的隐形转换带来了很多坑,实际上,很可能是他们没有比较全面理解转换的规则。但是,随着PHP5.x系列的发展,对于语言特性层面的批评慢慢变少,因为它逐渐完善了这一块。然后,对于性能的批评又进一步开始增加,不过,随着PHP7的发布,性能获得大幅度的提升。

一个足够简单,而又不断自我完善的东西,通常不会被时代洪流所抛弃的。 世界上只有两种语言,一种是经常被人骂的,另一种是没人用的。 我tm写了一千多字的草稿后才发现是php而不是phd。 很多人喷,一是不了解,为了喷而喷。二来是酸葡萄心理。

PHP的开发者社区风格非常稳健,从php4到php5,再到PHP7,乃至难产的php6版本,php这一路发展下来,语言本身在稳步的前进,同时对向下兼容处理很好。所以整个社区可以一脉相承的发展。

PHP6最然最终没有发布,但其核心的功能也都陆续迁移到了php5.x版本中。
最新刚刚发布的PHP7版本,那也是让人惊艳。我自己实际部署的效果,整个系统只做了一行代码的改动,就无缝迁移到了PHP7版本,系统负载直接降到了小数。这就是生产力。

我相信PHP7的普及会很快,因为确实会给厂商带来巨大的实惠:性能提升,可以减少机器,减少人力,系统稳定性也更好,也可以带来更多的收入。

PHP的手册,评论系统也是非常的完善。很多人黑PHP也仅仅停留在早期的概念上。php是有历史的包袱,存在不一致的地方。但每种语言都有自己的不足。

决定程序优雅的是人,而不是语言。

===================2016年1月26日晚补充=====================
没想到很多人点赞,再补充下我自己使用PHP的经历:

大学的时候曾经学过很多语言,不过最终还是学习PHP比较有成就感,应该是和应用层接触比较紧密,作出的东西有人用,再加上那时候网站刚开始流行,用PHP做个网站,做个聊天室,搭个论坛,很有成就感。就这样一直用起了PHP。

说道这儿,说一下PHP为什么会被喷。因为PHP入门简单,所以从业人员水平良莠不齐,再加上PHP语言本身又比较灵活,缺少语言层面的约束,所以就导致了各种五花八门的写法。再加上各种PHP的开源软件的流行。这些软件是如此的流行,以至于问为什么这样写,回答是:某某软件是这样写的。所以这也确实是造成了PHP的代码普遍比较乱的现象。但这都是十几年前的事情了,新版本的PHP语法也越来越严谨,oop的功能也越来越完善,用PHP一样可以写出简洁优雅的代码出来。所以这时候再来喷PHP,其实就out了。

2004年的时候,和团队成员一起接手了一个老的网站。确实体会到了 PHP代码如果没有好的组织带来的混乱。当时index1.php index2.php index3.php,一堆的文件。花了几个月的时候,把原来的业务逻辑都梳理清楚,然后重新实现。04年的时候还主要是面向过程,那时候使用smarty做页面和应用的分离。后来虽然离开了,但值得自豪的是我们团队当时为这个网站打下了很好的基础,这个网站后来也有很不错的发展。

再后来加入了一家国内的一线互联网公司,一开始做开发。接手了一个老的系统,当年曾经为公司带来几千万年收入的系统,就是用普通的php, mysql主从备份做的架构。后来切换到了后台的全文检索引擎,前端还是用PHP。

这时候发生了一个重大的事故。客户自助系统的数据无法同步到后台的引擎。客户系统那边是java + oracle的架构,客户的下架广告无法正常同步到后台引擎。这个事故直接引发了一系列人员的清理,这是后话。我当时作为引擎的接口人,就用PHP写脚本统计两边状态不同步的列表,让客户系统这边发消息同步。最终把两边的数据同步好。(其实是一件很简单的事情)

后台我受不了半夜鸡叫(搞运维的都知道),我转行去做了自动化测试。写了三年的自动化测试脚本,整理了一系列的自动化测试框架,工具,方法。当然,这些也都是用PHP写的。:)

后台了09年准备创业,10年正式辞职创业,到现在,我们团队用PHP做了三款成熟的开源软件。我们曾经比较过和我们功能类似的一款用其他语言写的软件的代码量:那款软件功能是我们的1/3,代码量比较我们还多。他们系统中的bug和feature的比例很高。我不是想证明哪种语言如何,我只是想证明,PHP语言可以写出精简优雅的代码,而且可以写的很精炼,表现力丰富。

在做这几款软件的过程中,我们也遇到了PHP的一系列的问题:
  • 如何解决全文检索的问题(不依赖第三方搜索引擎)
  • 如何解决计划任务的问题(不依赖操作系统计划任务)
  • 如何用户二次开发无法升级的问题
  • 常见安全问题的防护(xss, sql注入,附件上传,csrf等)
  • 如何用PHP做聊天服务器。(做轻量级的解决方案)
  • 如何解决PHP环境部署问题。

我们都做了比较轻量级(尽量减少第三方依赖)的解决方案。


我们还用ssh + php做了自己服务器的监控系统,用PHP写了各种备份,运维,监控的脚本。


以上的这些工作,PHP都很好的完成了。而且又有了PHP7版本,这个版本真的是让人惊艳,期待鸟哥后面的更快的版本。


这一些其他的语言也都可以实现,也都可以做的很好。所以单纯的争论语言其实没有什么用。每种语言都有应用的场景和价值,脱离这些谈论,其实没有什么意义。


建议大家把精力放到怎么赚钱上面来,语言只是工具。决定程序优雅的是人,而不是语言。



===================2016年1月27日早补充=====================

评论有的朋友说,为什么java总是排在第一位呢。我想回答的是:既然java总是排在第一位,为什么还要老是去喷排在后面的PHP呢?这是什么心理在起作用呢?


我在回答这个提问的时候,就知道肯定有其他语言社区的人跳出来,肯定拿优雅说事。我想回答的是,你号称自己优雅,那就优雅呗。为什么还总是靠嘲笑其他语言来抬高自己呢?这是什么心理起作用呢?


真正的实力是不需要靠贬低其他人来证明的。

真正的实力就是用来让其他人来羡慕,嫉妒,恨的。(哈哈,拉仇恨了。)

有些吃饱了没事干的网民,对我们PHP的事情指手画脚。PHP一不输出键盘战士(不然也不会在舆论上被压着打),二不输出饥饿和贫困,三不去折腾你们,还有什么好说的。 内置轮子太多,被认为是走捷径! phper顾着低头码代码,忙着赚钱没空反击别人黑他们,反正他们一打一个$,这得多有钱啊 为什么在知乎 php 被黑的最惨烈?




图的来源忘了,来自zhihuer。 php在哪里被黑的不惨烈? 看成phd了,逃~
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

작곡가 : AI를 통한 PHP 개발 지원 작곡가 : AI를 통한 PHP 개발 지원 Apr 29, 2025 am 12:27 AM

AI는 작곡가 사용을 최적화하는 데 도움이 될 수 있습니다. 특정 방법에는 다음이 포함됩니다. 1. 종속성 관리 최적화 : AI는 종속성을 분석하고 최상의 버전 조합을 권장하며 충돌을 줄입니다. 2. 자동화 된 코드 생성 : AI는 모범 사례를 준수하는 composer.json 파일을 생성합니다. 3. 코드 품질 향상 : AI는 잠재적 인 문제를 감지하고 최적화 제안을 제공하며 코드 품질을 향상시킵니다. 이러한 방법은 기계 학습 및 자연어 처리 기술을 통해 구현되어 개발자가 효율성과 코드 품질을 향상시킬 수 있도록 도와줍니다.

session_start () 함수의 중요성은 무엇입니까? session_start () 함수의 중요성은 무엇입니까? May 03, 2025 am 12:18 AM

session_start () iscrucialinphpformanagingUsersessions.1) itiniteSanewsessionifnoneexists, 2) ResumesAnxistessions, and3) setSasessionCookieForContInuityAcrosrequests, enablingplicationsirecationSerauthenticationAndpersonalizestContent.

H5 : HTML5의 주요 개선 H5 : HTML5의 주요 개선 Apr 28, 2025 am 12:26 AM

HTML5는 5 가지 주요 개선 사항을 제공합니다. 1. 시맨틱 태그는 코드 선명도 및 SEO 효과를 향상시킵니다. 2. 멀티미디어 지원은 비디오 및 오디오 임베딩을 단순화합니다. 3. 형태 향상은 검증을 단순화한다. 4. 오프라인 및 로컬 스토리지는 사용자 경험을 향상시킵니다. 5. 캔버스 및 그래픽 기능은 웹 페이지의 시각화를 향상시킵니다.

데이터 처리 및 계산에 MySQL 기능을 사용하는 방법 데이터 처리 및 계산에 MySQL 기능을 사용하는 방법 Apr 29, 2025 pm 04:21 PM

MySQL 기능은 데이터 처리 및 계산에 사용될 수 있습니다. 1. 기본 사용에는 문자열 처리, 날짜 계산 및 수학 연산이 포함됩니다. 2. 고급 사용에는 복잡한 작업을 구현하기 위해 여러 기능을 결합하는 것이 포함됩니다. 3. 성능 최적화를 위해서는 WHERE 절에서 기능 사용 및 GroupBy 및 임시 테이블 사용을 피해야합니다.

작곡가 : PHP 개발자의 패키지 관리자 작곡가 : PHP 개발자의 패키지 관리자 May 02, 2025 am 12:23 AM

Composer는 PHP의 종속성 관리 도구이며 Composer.json 파일을 통해 프로젝트 종속성을 관리합니다. 1) 종속성 정보를 얻기 위해 Composer.json을 구문 분석합니다. 2) 종속성 트리를 형성하기위한 종속성; 3) Packagist에서 공급 업체 디렉토리로 종속성을 다운로드하여 설치합니다. 4) Composer.Lock 파일을 생성하여 팀 일관성 및 프로젝트 유지 관리 가능성을 보장하기 위해 종속성 버전을 잠그십시오.

사용자 인증에 세션을 사용하는 방법을 설명하십시오. 사용자 인증에 세션을 사용하는 방법을 설명하십시오. Apr 26, 2025 am 12:04 AM

이 세션은 서버 측 상태 관리 메커니즘을 통해 사용자 인증을 인식합니다. 1) 세션 생성 및 고유 ID의 세션 생성, 2) ID는 쿠키를 통해 전달됩니다. 3) ID를 통해 서버 저장 및 세션 데이터에 액세스합니다. 4) 사용자 인증 및 상태 관리가 실현되어 응용 프로그램 보안 및 사용자 경험이 향상됩니다.

MySQL의 문자 세트 및 Collation 규칙을 구성하는 방법 MySQL의 문자 세트 및 Collation 규칙을 구성하는 방법 Apr 29, 2025 pm 04:06 PM

MySQL에서 문자 세트 및 콜라주를 구성하는 방법은 다음과 같습니다. 1. 서버 수준에서 문자 세트 및 콜라주 설정 : setNames'Utf8 '; setcharactersetutf8; setCollation_connection = 'utf8_general_ci'; 2. 특정 문자 세트 및 콜라주를 사용하는 데이터베이스를 만듭니다. createAbaseexample_DBCHARACTERSETUTF8COLLATEUTF8_GENERAL_CI; 3. 테이블을 만들 때 문자 세트 및 콜라주를 지정하십시오 : CreateTableAmplipt_table (idint

Java가 크로스 플랫폼 데스크톱 응용 프로그램을 개발하기 위해 인기있는 선택 인 이유는 무엇입니까? Java가 크로스 플랫폼 데스크톱 응용 프로그램을 개발하기 위해 인기있는 선택 인 이유는 무엇입니까? Apr 25, 2025 am 12:23 AM

javaispopularforcross-platformdesktopapplicationsduetoits "writeonce, runanywhere"철학

See all articles