PHP 是最糟糕的编程语言?
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">我已有将近二十年的编程经验,并<span style="color: black;">运用</span>过<span style="color: black;">各样</span>编程语言进行<span style="color: black;">研发</span>。在我以前做过的<span style="color: black;">非常多</span>工作和<span style="color: black;">此刻</span>正在做的这份工作中,我非常高兴能够将 PHP <span style="color: black;">做为</span>核心编程语言。从<span style="color: black;">第1</span>次<span style="color: black;">运用</span> PHP 工作<span style="color: black;">起始</span>,我就听到了关于 PHP 的<span style="color: black;">各样</span>抱怨,但与此<span style="color: black;">同期</span>我<span style="color: black;">亦</span>看到了 PHP 的威力。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;"><span style="color: black;">本文最初<span style="color: black;">发布</span>于 PHPArch 网站 ,经原作者 Chris Tankersley 授权,InfoQ 中文站翻译并分享。</span></strong></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">PHP <span style="color: black;">最少</span>是一门有趣的编程语言。这门语言和用它构建的程序<span style="color: black;">一般</span>属于两种设计哲学。在<span style="color: black;">这儿</span>,我所说的并非软件<span style="color: black;">研发</span>生命周期,如瀑布或敏捷,而是关于软件应该是什么样的基本思想。这些思想被<span style="color: black;">叫作</span>为“正确的方式”(</span><span style="color: black;">The Right Way</span><span style="color: black;">)和 “更糟<span style="color: black;">便是</span>更好”(</span><span style="color: black;">Worse is better</span><span style="color: black;">)。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">PHP 又是一门相当奇怪的编程语言。当人们抱怨这门语言“很槽糕”时,<span style="color: black;">她们</span>并<span style="color: black;">无</span>说错。这门语言确实有<span style="color: black;">非常多</span><span style="color: black;">欠好</span>的<span style="color: black;">地区</span>。搁在以前,这门语言还有<span style="color: black;">更加多</span>糟糕的问题。嘲笑 PHP 的博文《全面解析 PHP 的槽糕设计》(</span><span style="color: black;">PHP: a fractal of bad design</span><span style="color: black;">)确实有几个正确的观点,即使这些观点在九年前<span style="color: black;">发布</span>时就<span style="color: black;">已然</span>过时了。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">然而,与此<span style="color: black;">同期</span>,<span style="color: black;">研发</span>人员却<span style="color: black;">能够</span>利用 PHP 创建结构上“正确”的软件,并从其他语言中引入被视为良好实践的哲学。像 Laminas 和 Symfony <span style="color: black;">这般</span>的框架就<span style="color: black;">运用</span>了面向对象编程的最佳实践,使<span style="color: black;">研发</span>者<span style="color: black;">能够</span>用这些框架编写结构正确的代码。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">PHP 是怎么做到这些的?这是<span style="color: black;">由于</span> PHP 是最糟糕的编程语言。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">设计软件</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">1991 年,Richard P. Gabriel <span style="color: black;">发布</span>了一篇<span style="color: black;">文案</span>《Lisp:好<span style="color: black;">信息</span>,坏<span style="color: black;">信息</span>,<span style="color: black;">怎样</span>赢得大》(</span><span style="color: black;">Lisp: Good News, Bad News, How to Win Big</span><span style="color: black;">)。这篇<span style="color: black;">文案</span>的论点是,在软件设计和寿命方面,“更糟<span style="color: black;">便是</span>更好”的哲学将是更好的<span style="color: black;">选取</span>。他之<span style="color: black;">因此</span>得出这一结论,是<span style="color: black;">由于</span>他<span style="color: black;">认识</span>到<span style="color: black;">显现</span>了两种<span style="color: black;">区别</span>的程序设计流派,他分别将之命名为“麻省理工学院/斯坦福风格”(</span><span style="color: black;">MIT/Standford Style</span><span style="color: black;">),<span style="color: black;">或</span>“正确的方式”,以及“新泽西风格”(</span><span style="color: black;">New Jersey Style</span><span style="color: black;">)<span style="color: black;">或</span>“更糟<span style="color: black;">便是</span>更好”。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这两种哲学的<span style="color: black;">目的</span><span style="color: black;">类似</span>,但在关键<span style="color: black;">行业</span>却有所<span style="color: black;">区别</span>。两种风格都侧重于哲学理念的四个关键<span style="color: black;">行业</span>:简单性(</span><span style="color: black;">Simplicity</span><span style="color: black;">)、正确性(</span><span style="color: black;">Correctness</span><span style="color: black;">)、一致性(</span><span style="color: black;">Consistency</span><span style="color: black;">)和完整性(</span><span style="color: black;">Completeness</span><span style="color: black;">)。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">麻省理工学院风格是<span style="color: black;">这般</span>描述的:</span></p><span style="color: black;">简单性:设计<span style="color: black;">必定</span>要简单,不论它的实现还是接口,都<span style="color: black;">必定</span>要简单。相较而言,让接口保持简单更重要。</span><span style="color: black;">正确性:在所有<span style="color: black;">能够</span>观察到的方方面面,设计<span style="color: black;">必定</span>要正确。不要妄想做一个不正确的设计。</span><span style="color: black;">一致性: 设计<span style="color: black;">必定</span><span style="color: black;">不可</span>是不一致的。为了<span style="color: black;">保证</span>一致性,你<span style="color: black;">能够</span>略微牺牲简单性和完整性。一致性和正确性同等重要。</span><span style="color: black;">完整性:设计<span style="color: black;">必定</span>要尽可能多地涵盖重要的<span style="color: black;">状况</span>。所有符合预期的情况<span style="color: black;">必定</span>要被覆盖到。完整性优先级应该高于简单性。</span>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">至于新泽西风格,Gabriel 说,它将其<span style="color: black;">目的</span>定义为:</span></p><span style="color: black;">简单性:设计<span style="color: black;">必定</span>要简单,不论它的实现还是接口,都<span style="color: black;">必定</span>要简单。而相较而言,让实现保持简单更重要。简单是最重要的,其他的特性都不如保持简单更重要。</span><span style="color: black;">正确性:在所有<span style="color: black;">能够</span>观察到的方面,设计<span style="color: black;">必定</span>要正确。<span style="color: black;">然则</span><span style="color: black;">能够</span>为了简单而轻微牺牲正确性。</span><span style="color: black;">一致性:设计<span style="color: black;">必定</span><span style="color: black;">不可</span>太过不一致。某些<span style="color: black;">状况</span>下,为了<span style="color: black;">保准</span>简单<span style="color: black;">能够</span>牺牲一致性。<span style="color: black;">倘若</span>将某个不<span style="color: black;">平常</span>的<span style="color: black;">状况</span>引入设计,会<span style="color: black;">引起</span>实现变<span style="color: black;">繁杂</span><span style="color: black;">或</span>不一致,<span style="color: black;">那样</span>就不要<span style="color: black;">思虑</span>这种<span style="color: black;">状况</span>。</span><span style="color: black;">完整性:设计<span style="color: black;">必定</span>要尽可能多地涵盖重要的<span style="color: black;">状况</span>。所有符合预期的<span style="color: black;">状况</span><span style="color: black;">必定</span>要被覆盖到。完整性<span style="color: black;">能够</span>为任何其他特性让步。<span style="color: black;">实质</span>上,一旦威胁到实现的简单性,完整性必须要被牺牲。<span style="color: black;">倘若</span>为了保持简单,<span style="color: black;">能够</span>牺牲一致性来实现完整性;尤其是接口的一致性。</span>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这场争论的关键是用 LISP 和 C <span style="color: black;">做为</span>例子<span style="color: black;">来讲</span>明<span style="color: black;">为何</span>“更糟<span style="color: black;">便是</span>更好”。<span style="color: black;">针对</span> LISP 程序员 Gabriel <span style="color: black;">来讲</span>,LISP 是一种比 C 更好的语言,速度和 C <span style="color: black;">同样</span>快,<span style="color: black;">况且</span> Common LISP 的设计、<span style="color: black;">研发</span>和标准化<span style="color: black;">已然</span>花了<span style="color: black;">非常多</span>年。定义该语言的规范吸取了所有<span style="color: black;">区别</span>的 LISP 的精华,而现代<span style="color: black;">研发</span>环境<span style="color: black;">针对</span> LISP <span style="color: black;">研发</span>者<span style="color: black;">来讲</span>是最好的。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">LISP 是正确的方式</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">LISP <span style="color: black;">表率</span>了软件<span style="color: black;">研发</span>的“正确的方式”。LISP 易于交互,你<span style="color: black;">能够</span><span style="color: black;">经过</span><span style="color: black;">各样</span>方式与它交互。<span style="color: black;">期盼</span>从 Fortran 中调用 LISP?你<span style="color: black;">能够</span>从 Fortran 中调用 LISP 并将数据传入,反之<span style="color: black;">也</span>然。在<span style="color: black;">运用</span>遗留代码时,你<span style="color: black;">能够</span>愉快地<span style="color: black;">运用</span> LISP 的所有现代“<span style="color: black;">豪气</span>”特性。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">LISP <span style="color: black;">持有</span>一致的设计,这得益于它的规范。假如你<span style="color: black;">科研</span>一下 Python <span style="color: black;">这般</span>的现代语言,规范在<span style="color: black;">供给</span>多个后端和编译器方面有很大的<span style="color: black;">功效</span>,<span style="color: black;">况且</span>它们都以<span style="color: black;">一样</span>的方式解释或编译代码。这些工具是一流的,1991 年的 LISP <span style="color: black;">持有</span><span style="color: black;">咱们</span>今天仍然享受的所有舒适,<span style="color: black;">例如</span><span style="color: black;">过程</span>调试、数据<span style="color: black;">检测</span>和花哨的编辑器。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">做为</span>一种语言,LISP 是完备的。它<span style="color: black;">拥有</span>先进的面向对象编程层、多重继承、一流的对象以及函数和类型。LISP 似乎是<span style="color: black;">研发</span>人员心中想要的编程语言。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">1991 年,LISP 这么编程语言可能<span style="color: black;">处在</span>有史<span style="color: black;">败兴</span>的最佳状态。这种技术上的正确性并<span style="color: black;">无</span>被<span style="color: black;">实质</span><span style="color: black;">运用</span>所证实。LISP 的<span style="color: black;">研发</span>商正在衰退。<span style="color: black;">数年</span>来<span style="color: black;">消极</span><span style="color: black;">资讯</span>和错误定位阻碍了 LISP 的<span style="color: black;">外边</span>声誉。人们<span style="color: black;">再也不</span>将其视为向<span style="color: black;">最后</span>用户交付软件的方式。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">就<span style="color: black;">研发</span>而言,LISP <span style="color: black;">常常</span><span style="color: black;">表率</span>着许多与“大规模预先设计”(Big Design Up Front,BDUF)<span style="color: black;">同样</span>的理想。假如你曾经<span style="color: black;">运用</span>过瀑布模型(Waterfall Model)<span style="color: black;">这般</span>的设计<span style="color: black;">办法</span>,你就会<span style="color: black;">发掘</span><span style="color: black;">有些</span>问题。“正确的方式”非常强调一致性、正确性,并<span style="color: black;">保证</span><span style="color: black;">思虑</span>到所有能想到的问题。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">LISP 本身并非一种单一的语言,而是一个语言家族。尽管 Common LISP 被设计成一种标准,<span style="color: black;">然则</span> LISP 本身的实现方式是<span style="color: black;">按照</span>需要完成的<span style="color: black;">各样</span>工作而存在的。Lockless Inc 网站上的一篇<span style="color: black;">文案</span>指出,这种“碎片化”是 LISP <span style="color: black;">最后</span>失败的决定<span style="color: black;">原因</span>之一。尽管 LISP <span style="color: black;">保持</span>软件设计的“正确的方式”,<span style="color: black;">然则</span>这种碎片化<span style="color: black;">引起</span>代码<span style="color: black;">守护</span>和可移植性都受到了影响。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">C 和 Unix 是错误的方式</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">同期</span>,<span style="color: black;">因为</span> Unix 的出现,C 语言<span style="color: black;">逐步</span><span style="color: black;">作为</span>软件<span style="color: black;">研发</span>的首选<span style="color: black;">办法</span>。C 语言是为 Unix 设计的,而 Unix 是用 C 语言设计的。它的<span style="color: black;">研发</span>人员与麻省理工学院的 LISP 及其作者有着<span style="color: black;">区别</span>的设计立场。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">在 1972 年,C 语言被设计成一种简单的语言。到 1991 年,它<span style="color: black;">已然</span><span style="color: black;">出现</span>了<span style="color: black;">有些</span>变化,<span style="color: black;">然则</span> C 语言的基本原理<span style="color: black;">无</span>改变。<span style="color: black;">有些</span>特性是为了满足<span style="color: black;">研发</span>者和 Unix 的<span style="color: black;">需要</span>而添加的。<span style="color: black;">由于</span>语言很简单,<span style="color: black;">因此</span>编写编译器和程序很容易。尽管这种语言并不会妨碍你进行<span style="color: black;">繁杂</span>的编程,<span style="color: black;">然则</span>与 LISP 相比,C 语言估计<span style="color: black;">仅有</span>程序员所需的 50-80% 特性。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">然则</span>, C 语言却有很强的可移植性。相<span style="color: black;">针对</span>常用于 LISP 软件和环境的硬件,它<span style="color: black;">亦</span><span style="color: black;">能够</span>运行在低功率硬件上。这一<span style="color: black;">原因</span>使得它<span style="color: black;">能够</span>在更广泛的<span style="color: black;">设备</span>上编译和运行软件。C 语言和 Unix 很容易<span style="color: black;">运用</span>,Gabriel 认为 Unix 和 C 语言会像病毒<span style="color: black;">同样</span>流行起来。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">在 Dennis Ritchie 设计和构建 Unix 的过程中,C 语言得到了发展。<span style="color: black;">由于</span>贝尔实验室(Bell Labs)不被<span style="color: black;">准许</span>正式进入计算机<span style="color: black;">行业</span>,<span style="color: black;">因此</span> Unix <span style="color: black;">亦</span><span style="color: black;">能够</span><span style="color: black;">容易</span>地分发给<span style="color: black;">各样</span><span style="color: black;">区别</span>的用户。这些用户<span style="color: black;">帮忙</span>修补 Unix 以满足<span style="color: black;">她们</span>自己的<span style="color: black;">需要</span>。Dennis Ritchie 能够<span style="color: black;">按照</span><span style="color: black;">需要</span>将这些补丁整合在<span style="color: black;">一块</span>,而不必事先<span style="color: black;">思虑</span>这些<span style="color: black;">需要</span>。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">与 LISP <span style="color: black;">区别</span>,C <span style="color: black;">迄今</span>仍然被<span style="color: black;">海量</span><span style="color: black;">运用</span>。尽管高级的解释性语言,如 PHP、JavaScript 和 Python 是许多<span style="color: black;">研发</span>者的首选,<span style="color: black;">然则</span>这些高级语言<span style="color: black;">非常多</span>都是用 C 语言<span style="color: black;">研发</span>的。即使像 Rust <span style="color: black;">这般</span>的竞争对手<span style="color: black;">起始</span>崭露头角,但能够在小型低功率设备上运行仍然是 C 语言的<span style="color: black;">优良</span>。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">PHP 是最槽糕的</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;"><span style="color: black;">因此呢</span>,“更糟<span style="color: black;">便是</span>更好”的软件<span style="color: black;">首要</span>会被接受,其次它会<span style="color: black;">运用</span>户期望更少,第三,这些软件将被<span style="color: black;">持续</span>改进,直到接近“正确的<span style="color: black;">办法</span>”的程度。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">——Richard Gabrie</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">在这一启示的几年后,Rasmus Lerdorf <span style="color: black;">起始</span><span style="color: black;">科研</span>个人主页/表单解释器,<span style="color: black;">亦</span><span style="color: black;">便是</span><span style="color: black;">咱们</span><span style="color: black;">此刻</span>所知的 PHP。PHP/FI 的诞生是<span style="color: black;">由于</span> Lerdorf 需要<span style="color: black;">守护</span>他的主页,并与表单和数据库进行交互。PHP/FI <span style="color: black;">乃至</span>不是<span style="color: black;">做为</span>一种<span style="color: black;">实质</span>的编程语言设计的,而是<span style="color: black;">做为</span> C 语言之上的一层脚本和函数设计的。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">PHP 很简单</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">设计<span style="color: black;">必定</span>要简单,不论是它的实现还是接口。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">PHP 底层<span style="color: black;">运用</span>了 C 语言,<span style="color: black;">咱们</span>之前<span style="color: black;">已然</span>说过,这部分是“最糟糕的”。然而,这<span style="color: black;">亦</span>带来了<span style="color: black;">有些</span><span style="color: black;">优良</span>,最重要的是,更简单的底层语言<span style="color: black;">能够</span>让它<span style="color: black;">更易</span>扩展。虽然 Hack/HHVM 采用了<span style="color: black;">更加多</span>的 C++ <span style="color: black;">办法</span>,但 PHP 本身仍然是 C 语言。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">只需短短几个小时就能学完这门语言的内部结构。Elizabeth Smith <span style="color: black;">发布</span>过一篇关于 PHP 扩展的精彩演讲,其<span style="color: black;">中间商</span>绍了<span style="color: black;">海量</span>关于 PHP 的内部工作原理。这门语言本身借鉴了其他 C 风格的语言,不仅易于阅读,并且能够跟 C 风格的其他语言互相转换。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">PHP 的大<span style="color: black;">都数</span>接口,<span style="color: black;">或</span>说标准库,都非常简单,<span style="color: black;">由于</span>大<span style="color: black;">都数</span>核心功能都只<span style="color: black;">不外</span>是包装了<span style="color: black;">各样</span> C 语言库,<span style="color: black;">而后</span>几乎原封不动地公开出来。尽管<span style="color: black;">这般</span>做会<span style="color: black;">引起</span>接口上的<span style="color: black;">有些</span>不一致,<span style="color: black;">然则</span>它为来自 C 或 C++ 的<span style="color: black;">研发</span>者<span style="color: black;">供给</span>了一个<span style="color: black;">熟练</span>的环境。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">PHP 语言非常注重于 Web <span style="color: black;">研发</span>。将 HTTP 中的概念提取出来并在语言中找到<span style="color: black;">类似</span>的概念<span style="color: black;">一般</span>非常简单。<span style="color: black;">期盼</span><span style="color: black;">认识</span>一个请求的头信息吗?get_headers() 就能满足你。获取请求信息就像读取 $_GET 和 $_POST 全局变量<span style="color: black;">同样</span>简单。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">PHP 保持了简单的<span style="color: black;">研发</span>者接口,并且尽可能地保持内部结构的简单。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">PHP(几乎)是正确的</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">在所有<span style="color: black;">能够</span>观察到的方面,设计<span style="color: black;">必定</span>要正确。<span style="color: black;">然则</span><span style="color: black;">能够</span>为了简单性而轻微牺牲正确性。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">在<span style="color: black;">这儿</span>,PHP 倾向于<span style="color: black;">选取</span>“简单”而不是正确。在 HHVM <span style="color: black;">显现</span>之前,语言的外观和特性<span style="color: black;">始终</span><span style="color: black;">无</span>得到规范。Zend 解释器本身<span style="color: black;">便是</span>规范,并且这门语言的<span style="color: black;">行径</span>方式总是 “正确”的(不<span style="color: black;">包含</span><span style="color: black;">实质</span>的错误)。<span style="color: black;">想要</span>用别的东西代替 PHP 引擎,就必须实现现有引擎的所有特性。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">许多核心函数的 LAX 函数参数和返回类型都使得系统的工作<span style="color: black;">更易</span>。像 strpos() <span style="color: black;">这般</span>的函数返回值<span style="color: black;">能够</span>是整型数或布尔值,相<span style="color: black;">针对</span>严格设计成返回整型数或抛出<span style="color: black;">反常</span>的<span style="color: black;">办法</span>,处理要稍微容易<span style="color: black;">有些</span>。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">看 PHP 语言的发展,几乎所有新特性都是<span style="color: black;">创立</span>在<span style="color: black;">研发</span>人员需要的<span style="color: black;">基本</span>上,而不是“<span style="color: black;">由于</span>它错了<span style="color: black;">因此</span>必须修复”的严肃想法。<span style="color: black;">更加多</span>地关注那些严格类型和<span style="color: black;">反常</span>错误是一种更正确的<span style="color: black;">办事</span><span style="color: black;">办法</span>。然而,还有<span style="color: black;">有些</span>东西,<span style="color: black;">例如</span>简短的箭头函数(arrow function)、属性和枚举,才是<span style="color: black;">研发</span>者想要用来简化代码的东西。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">PHP 不需要一致性</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">设计<span style="color: black;">必定</span><span style="color: black;">不可</span>太过不一致。某些<span style="color: black;">状况</span>下,为了保持简单<span style="color: black;">能够</span>牺牲一致性。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">我<span style="color: black;">乃至</span>不打算假装 PHP 是一致的,<span style="color: black;">然则</span>它的一致性<span style="color: black;">已然</span>足够了。当<span style="color: black;">触及</span>到数组与字符串函数时,人们可能会抱怨 needle/haystack 参数<span style="color: black;">次序</span>。<span style="color: black;">不外</span>,<span style="color: black;">通常</span>而言,数组函数是一致的,而字符串函数<span style="color: black;">亦</span>是一致的。与底层 C 库保持一致比在语言中保持一致要简单得多。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">PHP 在其他方面<span style="color: black;">亦</span>足够一致。正如我在 strpos() 中<span style="color: black;">说到</span>的,PHP <span style="color: black;">针对</span>遇到错误的函数往往会相当一致地返回 FALSE。这未必是正确的,但它却是一致的。带下划线和不带下划线的函数名<span style="color: black;">一般</span>都会匹配其<span style="color: black;">基本</span>库。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">为了简单起见, PHP 语言牺牲了一致性,<span style="color: black;">然则</span>即使<span style="color: black;">无</span>这个规范,它仍然<span style="color: black;">奋斗</span>在有<span style="color: black;">道理</span>的<span style="color: black;">地区</span>保持一致。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">PHP 的完整性符合所需</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">设计<span style="color: black;">必定</span>要尽可能多地涵盖重要的<span style="color: black;">状况</span>。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">无论何时,在针对 PHP 需求最大的设计任务:编写 Web 应用程序时,PHP 都是完备的。PHP 从未被设计成一种<span style="color: black;">能够</span>适用于编程世界所有问题的语言。尽管如此,它的简单性还是使它<span style="color: black;">能够</span>用于 Web 以外的场合。PHP 最初的目的<span style="color: black;">便是</span>为 Web 编程<span style="color: black;">供给</span>最基本的功能,这一趋势<span style="color: black;">始终</span><span style="color: black;">连续</span><span style="color: black;">迄今</span>。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">修改核心语言<span style="color: black;">一般</span><span style="color: black;">是由于</span><span style="color: black;">研发</span>人员的<span style="color: black;">需要</span>驱动。整个社区提出修改意见,<span style="color: black;">而后</span>经由社区投票,决定新特性被拒绝、改变<span style="color: black;">或</span>接受。该语言的许多创新都源于快速完成工作的需要。即便<span style="color: black;">咱们</span>吸收了其它语言的功能,<span style="color: black;">亦</span>是<span style="color: black;">由于</span>它使<span style="color: black;">咱们</span>的<span style="color: black;">研发</span>变得简单,而很少是<span style="color: black;">由于</span>其他语言做得“更正确”。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">今天,你<span style="color: black;">能够</span>用 PHP <span style="color: black;">研发</span> Web 应用程序。五年后,你仍然<span style="color: black;">能够</span>用 PHP <span style="color: black;">研发</span> Web 应用程序,只<span style="color: black;">不外</span>会<span style="color: black;">增多</span><span style="color: black;">有些</span>新特性。<span style="color: black;">然则</span>,语言本身的完整性<span style="color: black;">已然</span>符合今天所需。<span style="color: black;">倘若</span><span style="color: black;">将来</span>有需要,<span style="color: black;">咱们</span><span style="color: black;">能够</span>随时修改语言或为它添加新功能。</span></p>
<h1 style="color: black; text-align: left; margin-bottom: 10px;">更糟<span style="color: black;">便是</span>更好吗?</h1>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">Gabriel 承认,“更糟<span style="color: black;">便是</span>更好”的哲学指的是设计看起来很糟糕,<span style="color: black;">亦</span>许<span style="color: black;">不该</span>该<span style="color: black;">做为</span>更好的<span style="color: black;">选取</span>。<span style="color: black;">独一</span>的问题是,当他审视这两种哲学时,与麻省理工学院/“正确的方式”的设计哲学相比,“更糟<span style="color: black;">便是</span>更好”<span style="color: black;">最后</span>仍然是更灵活的<span style="color: black;">选取</span>,“<span style="color: black;">拥有</span>更好的<span style="color: black;">存活</span>特性”。<span style="color: black;">倘若</span><span style="color: black;">咱们</span>看一下 PHP,就<span style="color: black;">能够</span>证实“更糟<span style="color: black;">便是</span>更好”这一观点。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这些年来,Gabriel 承认他在哪种方式更好之间摇摆不定。PHP 社区<span style="color: black;">始终</span>在争论<span style="color: black;">咱们</span>是应该正确地<span style="color: black;">办事</span>还是继续简单地<span style="color: black;">办事</span>。<span style="color: black;">咱们</span>有像 Laminas <span style="color: black;">这般</span>的框架,以经典的计算机科学方式构建库,<span style="color: black;">而后</span><span style="color: black;">咱们</span>有像 Laravel <span style="color: black;">这般</span>的框架,关注<span style="color: black;">研发</span>者的体验和速度。PHP 本身二者兼具。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">下次再听到有人骂 PHP 的时候,就随他喷去吧。这门语言确实很糟糕。但从许多方面来看,PHP 的长寿和广泛<span style="color: black;">运用</span>证明了<span style="color: black;">这般</span>一个事实:用“正确的方式”<span style="color: black;">办事</span>并不总是比用“最糟糕”的方式<span style="color: black;">办事</span>好。当有人吐槽你正在<span style="color: black;">运用</span>的框架时,你要明白从长远来看这并不重要。<span style="color: black;">选取</span>一种你认为适合自己的设计哲学,并欣然接受这一点:更糟的可能<span style="color: black;">实质</span>上更好。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;"><span style="color: black;">作者介绍:</span></strong></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">Chris Tankersley <span style="color: black;">持有</span>多种角色:丈夫、父亲、作家、演讲家、播客主持人和 PHP <span style="color: black;">研发</span>者。Chris 在 12 年的编程生涯中<span style="color: black;">运用</span> 了<span style="color: black;">非常多</span>种<span style="color: black;">区别</span>的框架和语言,<span style="color: black;">然则</span>他一天的大部分时间都在<span style="color: black;">运用</span> PHP 和 Python。他是《Docker for Developers(尚无中文版)的作者,并与<span style="color: black;">机构</span>和<span style="color: black;">研发</span>者合作,将容器整合到<span style="color: black;">她们</span>的工作流中。</span></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;"><span style="color: black;">原文链接:</span></strong></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">https://www.phparch.com/2021/09/education-station-php-is-the-worst/</span></p>
楼主的文章深得我心,表示由衷的感谢!
页:
[1]