宿迁腾云网络网站建设公司

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • APP开发
    • SEO优化
  • 建站费用
  • 成功案例
    • 网站建设案例
    • 小程序案例
    • APP开发案例
    • SEO优化案例
  • 行业动态
    • 网站建设
    • SEO优化
    • 技术日志
  • 联系我们
    • 关于我们
首页 > 行业动态 > 技术日志 > PHP是怎么做到最糟糕的编程语言?|?

PHP是怎么做到最糟糕的编程语言?|?

2021-10-09

作者 |

翻译 |

规划 | 蔡芳芳

本文首发于本站,经原作者授权,由中文网翻译分享。

我有近 20 年的编程经验,使用过各种编程语言进行开发。在我以前做过的很多工作和现在做的工作中,我很高兴能够使用PHP作为核心编程语言。从我第一次使用 PHP 开始工作,我听到了对 PHP 的各种抱怨,但同时我也看到了 PHP 的强大。

PHP 至少是一种有趣的编程语言。这种语言和用它构建的程序通常属于两种设计理念。在这里,我不是在谈论软件开发生命周期,例如瀑布或敏捷,而是关于软件应该是什么的基本思想。这些想法被称为“The Way”和“ is ”(是)。

PHP 是另一种相当奇怪的编程语言。当人们抱怨语言“不好”时,他们并没有犯错。这种语言确实有很多缺点。撇开,这种语言有更多不好的问题。嘲笑 PHP 的博客文章“PHP 糟糕设计的综合分析”(PHP:a of bad)确实有一些正确的观点,尽管这些观点在九年前发布时已经过时了。

然而,与此同时,开发人员可以使用 PHP 来创建结构上“正确”的软件,并从其他语言中引入被认为是良好实践的理念。框架喜欢并使用面向对象编程的最佳实践,因此开发人员可以使用这些框架编写结构良好的代码。

PHP 如何做到这一点?这是因为 PHP 是最糟糕的编程语言。

设计软件

1991年,P.发表了一篇文章《Lisp: Good News, Bad News, How to Win Big》(Lisp: Good News, Bad News, How to Win Big)。本文的论点是,在软件设计和寿命方面,“越差越好”的理念将是更好的选择。他得出这个结论是因为他意识到出现了两个不同的编程学校,他将它们命名为“MIT/ ”(MIT/),或者“正确的方式”。,以及“新泽西”或“越差越好”。

这两种哲学的目标相似,但在关键领域有所不同。两种风格都专注于哲学的四个关键领域:简单性()、正确性()、一致性()和完整性()。

MIT 风格是这样描述的:

简单:设计必须简单,无论是实现还是接口,都必须简单。相比之下,保持界面简单更重要。

正确性:在所有可观察的方面,设计必须是正确的。不要试图做出错误的设计。

一致性:设计不能不一致。为了确保一致性,您可以稍微牺牲简单性和完整性。一致性和正确性同样重要。

完整性:设计必须涵盖尽可能多的重要情况。必须涵盖所有符合预期的情况。完整性的优先级应该高于简单性。

至于新泽西风格,它将其目标定义为:

简单:设计必须简单,无论是实现还是接口php高级程序设计:模式,框架与测试,都必须简单。相比之下,保持实现简单更为重要。简单是最重要的,其他功能不如保持简单重要。

正确性:设计必须在所有可观察的方面都是正确的。但是为了简单起见,可以稍微牺牲正确性。

一致性:设计不能太不一致。在某些情况下,可以牺牲一致性来确保简单性。如果在设计中引入一个不常见的情况会导致实现变得复杂或不一致,那么就不要考虑这种情况。

完整性:设计必须涵盖尽可能多的重要情况。必须涵盖所有符合预期的情况。任何其他特征的完整性都会受到影响。事实上,一旦实现的简单性受到威胁,就必须牺牲完整性。如果你想保持简单,你可以牺牲一致性来实现完整性;尤其是界面的一致性。

这场争论的关键在于以 LISP 和 C 为例来说明为什么“越糟越好”。对于 LISP 程序员来说,LISP 是一种比 C 更好的语言,和 C 一样快,而且 LISP 的设计、开发和标准化已经花费了很多年。定义语言的规范吸取了所有不同 LISP 的精髓,现代开发环境最适合 LISP 开发人员。

LISP 是正确的方式

LISP 代表了软件开发的“正确方式”。LISP 易于交互,您可以通过多种方式与其交互。想从中调用 LISP?您可以从中调用 LISP 并传入数据,反之亦然。使用遗留代码时,您可以愉快地使用 LISP 的所有现代“豪华”功能。

由于其规范,LISP 具有一致的设计。如果你学习这样一种现代语言,该规范在提供多个后端和编译器方面有很大的作用,它们都以相同的方式解释或编译代码。这些工具都是一流的,1991 年的 LISP 拥有我们今天仍然享受的所有舒适,例如步进调试、数据检查和花哨的编辑器。

作为一种语言,LISP 是完整的。它具有先进的面向对象编程层,多重继承,一流的对象、函数和类型。LISP 似乎是开发人员想要的编程语言。

1991 年,像 LISP 这样的编程语言可能处于有史以来最好的状态。这种技术正确性尚未得到实际使用的证实。LISP 的开发者正在减少。多年来,负面新闻和错误定位阻碍了 LISP 的外部声誉。人们不再将其视为向最终用户交付软件的一种方式。

在开发方面,LISP 经常代表许多与“Big Up”(BDUF)相同的理想。如果你曾经使用过瀑布模型()这样的设计方法,你会发现一些问题。“正确的方式”非常强调一致性和正确性,并确保考虑到所有可以想到的问题。

LISP 本身不是一种语言,而是一个语言家族。虽然 LISP 是作为标准设计的,但 LISP 的实现本身是根据需要完成的各种任务而存在的。Inc网站的一篇文章指出,这种“碎片化”是导致LISP最终失败的决定性因素之一。尽管 LISP 坚持软件设计的“正确方式”,但这种碎片化已经影响了代码的维护和可移植性。

C 和 Unix 是错误的方式

同时,由于Unix的出现,C语言逐渐成为软件开发的首选方法。C语言是为Unix设计的,Unix是为C语言设计的。它的开发人员与麻省理工学院的 LISP 及其作者有着不同的设计立场。

1972 年,C 语言被设计为一种简单的语言。到1991年,它发生了一些变化,但C语言的基本原理没有改变。添加了一些功能以满足开发人员和 Unix 的需求。因为语言非常简单,所以很容易编写编译器和程序。虽然这种语言并不妨碍你进行复杂的编程,但与 LISP 相比,C 语言估计只有程序员需要的 50-80% 的功能。

但是,C语言具有很强的可移植性。与 LISP 软件和环境中常用的硬件相比,它还可以在低功耗硬件上运行。这个因素使得在更广泛的机器上编译和运行软件成为可能。C语言和Unix易于使用。我认为 Unix 和 C 语言会像病毒一样流行起来。

在设计和构建 Unix 的过程中,开发了 C 语言。由于贝尔实验室不允许正式进入计算机领域,Unix 也可以很容易地分发给各种不同的用户。这些用户帮助修补 Unix 以满足他们自己的需求。这些补丁可以根据需求进行集成,无需提前考虑这些需求。

与 LISP 不同,C 语言至今仍被广泛使用。虽然PHP等高级解释语言是很多开发者的首选,但是这些高级语言很多都是用C语言开发的。即使像 Rust 这样的竞争对手开始出现,在小型、低功耗设备上运行的能力仍然是 C 语言的优势。

PHP 是最糟糕的

因此,“越差越好”的软件首先会被接受,其次,它会让用户期望更少,其次,这些软件会不断改进,直到接近“正确的方式”。

——

这个启示几年后,我开始研究个人主页/表单解释器,也就是我们现在所知道的 PHP。PHP/FI 的诞生是因为需要维护他的主页并与表单和数据库进行交互。PHP/FI 甚至不是作为一种实际的编程语言设计的,而是作为 C 语言之上的脚本和函数层。

PHP很简单

无论是实现还是接口,设计都必须简单。

PHP在底层使用了C语言,正如我们之前所说php高级程序设计:模式,框架与测试,这部分是“最糟糕”的部分。但是,这也带来了一些优势,最重要的是,更简单的底层语言可以使其更容易扩展。尽管 Hack/HHVM 使用了更多的 C++ 方法,但 PHP 本身仍然是 C 语言。

您可以在短短几个小时内了解语言的内部结构。我做了一个关于 PHP 扩展的精彩讲座,介绍了很多 PHP 的内部工作原理。这种语言本身借鉴了其他 C 风格的语言,不仅易于阅读,而且可以与其他 C 风格的语言相互转换。

PHP的大部分接口,或者说标准库,都非常简单,因为大部分核心功能无非就是封装了各种C语言库,然后几乎完好无损的公开。虽然这样做会导致界面上的一些不一致,但它为来自 C 或 C++ 的开发人员提供了一个熟悉的环境。

PHP 语言非常专注于 Web 开发。提取 HTTP 中的概念并找到语言中的相似概念通常非常简单。想知道一个请求的头部信息吗?() 可以满足你。获取请求信息就像读取 $_GET 和 $ 全局变量一样简单。

PHP 维护了一个简单的开发人员界面,并使其内部结构尽可能简单。

PHP(几乎)是正确的

在所有可观察的方面,设计必须是正确的。但是为了简单起见,可以稍微牺牲正确性。

在这里,PHP 倾向于选择“简单”而不是正确。在 HHVM 出现之前,语言的外观和特性还没有被标准化。Zend 解释器本身就是规范,语言的行为方式总是“正确的”(不包括实际错误)。如果你想用别的东西替换 PHP 引擎,你必须实现现有引擎的所有功能。

许多核心函数的 LAX 函数参数和返回类型使系统的工作更容易。像 () 这样的函数的返回值可以是整数或布尔值。与严格设计为返回整数或抛出异常的方法相比,它更容易处理。

纵观PHP语言的发展,几乎所有的新特性都是基于开发者的需求,而不是“因为错,所以必须修复”的严肃想法。更多地关注那些严格的类型和异常错误是一种更正确的做事方式。但是,仍然有一些东西,例如短箭头函数()、属性和枚举,开发人员希望简化代码。

PHP不需要一致性

设计不能太不一致。在某些情况下,可以牺牲一致性来保持简单。

我什至不打算假装 PHP 是一致的,但它的一致性就足够了。当涉及到数组和字符串函数时,人们可能会抱怨 / 参数顺序。不过一般来说,数组函数是一致的,字符串函数也是一致的。与底层 C 库保持一致比在语言中保持一致要简单得多。

PHP 在其他方面也足够一致。正如我在 () 中提到的,PHP 倾向于相当一致地返回遇到错误的函数。这可能不正确,但它是一致的。带下划线和不带下划线的函数名称通常与基础库匹配。

为简单起见,PHP 语言牺牲了一致性,但即使没有这个规范,它仍然努力在有意义的地方保持一致。

PHP完整性满足要求

设计必须涵盖尽可能多的重要情况。

每当 PHP 是最苛刻的设计任务:编写 Web 应用程序时,PHP 就完成了。PHP 从来没有被设计为一种可以应用于编程世界中所有问题的语言。尽管如此,它的简单性使其可以在 Web 之外使用。PHP 的最初目的是为 Web 编程提供最基本的功能,这种趋势一直持续到今天。

修改核心语言通常是由开发人员的需求驱动的。整个社区提出修正案,然后通过社区投票,决定拒绝、更改或接受新功能。该语言的许多创新源于快速完成工作的需要。即使我们吸收了其他语言的特性,也是因为它让我们的开发更容易,很少是因为其他语言“做得更正确”。

今天,您可以使用 PHP 开发 Web 应用程序。五年后,您仍然可以使用 PHP 开发 Web 应用程序,但会添加一些新功能。然而,语言本身的完整性已经满足了今天的需求。将来如有必要,我们可以随时修改语言或为其添加新功能。

越差越好吗?

承认“越糟越好”的理念是指设计看起来很糟糕,也许不应该是更好的选择。唯一的问题是,当他审视这两种哲学时,与MIT/“正确方式”的设计哲学相比,“更糟更好”最终仍然是一个更灵活的选择,“具有更好的生存特性”。如果我们查看 PHP,我们可以确认“更糟更好”的观点。

多年来,他承认自己在哪种方式更好之间摇摆不定。PHP 社区一直在争论我们应该正确地做事还是继续简单地做事。我们有这样的框架,我们以经典的计算机科学方式构建库,然后我们有这样的框架,专注于开发人员的体验和速度。PHP 本身两者都有。

下次听到有人骂 PHP 就让他喷吧。这种语言真的很糟糕。但在许多方面,PHP 的长久和广泛使用证明了这样一个事实,即以“正确的方式”做事并不总是比以“最坏”的方式做事更好。当有人抱怨你使用的框架时,你必须明白从长远来看这无关紧要。选择一种您认为适合自己的设计理念,并接受这一点:实际上可能越糟越好。

关于作者:

有多个角色:丈夫、父亲、作家、演讲者、播客主持人和 PHP 开发人员。在他 12 年的编程生涯中,他使用了许多不同的框架和语言,但他一天中的大部分时间都在使用 PHP 和 PHP。他是《for(暂无中文版)》一书的作者,与公司和开发人员合作,将容器集成到他们的工作流程中。

原文链接:

Tag: 编程语言 php lisp
网站制作公众号

宿迁腾云网络网站建设公司 | 网站开发 | 网站制作 | 网站优化

咨询电话:13160355545

上一篇

返回栏目

下一篇

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

热推

  • 未来20内最终会消失的5种编程语言,你知道吗?
  • 微信公众平台开发教程 php一门怎么与公众号的对接,实现一些回复文字内容 微信公众号开发教程php
  • THINKPHP 5 的基本模型关联
  • 实例讲述实现转中文及转换默认编码的方法(二)
  • 腾云网络总裁黄智杰杰杰
  • 实例讲述PHP编程快速实现数组去重复函数与使用技巧
  • PHP thinkphp5 + layui 实现四级联动
  • 免费php网站模板MCms建站系统,完全开源、完全免费++Tp6开发! 网站模板免费下载php
  • 9本免费的Perl语言编程书籍推荐(一)
  • norepad++如何编写php代码名为PHP的iPad应用不但赋予iPad写代码的能力,能让它离线运行PHP代码php精粹:编写高效php代码

相关

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

如何查看php版本?多种方法助你快速知晓

如何查看php版本?多种方法助你快速知晓

PHP格式化:提升代码质量与协作效率的关键规则

如何查看虚拟主机上的 PHP 版本?这篇文章告诉你

Linux 系统管理员和 web 开发者必知:如何查看 PH

Linux 系统管理员和 web 开发者必知:如何查看 PH

免费开源的轻量级 PHP 开发框架 ThinkPHP,遵循

从零开始开发完整网站:前端、后端与 Web 服务器的关键技术

php框架 Java 与 PHP 之争:为何懂技术的大佬选

BitDefender 发布超级工厂病毒专杀工具,可清除所有

asp语言与php语言的区别 前端和后端的区别,你真的了解吗

标签

seo(1182) 市场营销(661) 网站制作(573) 网站建设(564) 搜索引擎(553) 网站(482) PHP(361) 编程语言(345) 建站(294) 关键词排名优化(267) 网站建设公司(245) 优化(216) seo排名(207) 域名(190) 软件(171) 网站优化(148) 搜索引擎优化(146) 外链(141) 科技(136) 网站关键词(124) 网站排名优化(123) 域名服务器(120) 网站排名(107) 时政(103) 排名优化(95) 搜索引擎收录(93) 网站设计(92) 电子商务(88) 引擎(86) 移动互联网(85) 开发框架(79) 开发(75) 网站服务器(74) 框架(68) 前端开发(68) 网站分析(66) 网站建设方案(65) 关键(64) 流量(63) 源码(62) 百度优化(62) 网站权重(61) 开放源代码(59) seo培训(53) 网页设计(51) 百度(51) php框架(50) 网站建设知识(50) 大数据(50) 谷歌(49)
宿迁腾云网络网站建设公司
网站建设
  • 私人定制
  • 标准模板建站
  • 经济模板建站
精品模板

宿迁腾云网络网站建设公司

联系电话:13160355545

公司地址:江苏省宿迁市丽景湾华庭北门都市花园公寓9楼907

联系邮箱:admin@tyweb.net

全国分站
  • 北京
  • 广东
  • 东莞 广州 中山 深圳 惠州 江门 珠海 汕头 佛山 湛江 河源 肇庆 潮州 清远 韶关 揭阳 阳江 云浮 茂名 梅州 汕尾
  • 山东
  • 济南 青岛 临沂 济宁 菏泽 烟台 泰安 淄博 潍坊 日照 威海 滨州 东营 聊城 德州 莱芜 枣庄
  • 江苏
  • 苏州 徐州 盐城 无锡 南京 南通 连云港 常州 扬州 镇江 淮安 泰州 宿迁
  • 河南
  • 郑州 南阳 新乡 安阳 洛阳 信阳 平顶山 周口 商丘 开封 焦作 驻马店 濮阳 三门峡 漯河 许昌 鹤壁 济源
  • 上海
  • 河北
  • 石家庄 唐山 保定 邯郸 邢台 沧州 秦皇岛 张家口 衡水 廊坊 承德
  • 浙江
  • 温州 宁波 杭州 台州 嘉兴 金华 湖州 绍兴 舟山 丽水 衢州
  • 陕西
  • 西安 咸阳 宝鸡 汉中 渭南 安康 榆林 商洛 延安 铜川
  • 湖南
  • 长沙 邵阳 常德 衡阳 株洲 湘潭 永州 岳阳 怀化 郴州 娄底 益阳 张家界 湘西
  • 重庆
  • 福建
  • 漳州 泉州 厦门 福州 莆田 宁德 三明 南平 龙岩
  • 天津
  • 云南
  • 昆明 红河 大理 文山 德宏 曲靖 昭通 楚雄 保山 玉溪 丽江 临沧 思茅 西双版纳 怒江 迪庆
  • 四川
  • 成都 绵阳 广元 达州 南充 德阳 广安 阿坝 巴中 遂宁 内江 凉山 攀枝花 乐山 自贡 泸州 雅安 宜宾 资阳 眉山 甘孜
  • 广西
  • 贵港 玉林 北海 南宁 柳州 桂林 梧州 钦州 来宾 河池 百色 贺州 崇左 防城港
  • 安徽
  • 芜湖 合肥 六安 宿州 阜阳 安庆 马鞍山 蚌埠 淮北 淮南 宣城 黄山 铜陵 亳州 池州 巢湖 滁州
  • 海南
  • 三亚 海口 琼海 文昌 东方
  • 江西
  • 南昌 赣州 上饶 吉安 九江 新余 抚州 宜春 景德镇 萍乡 鹰潭
  • 湖北
  • 武汉 宜昌 襄樊 荆州 恩施 孝感 黄冈 十堰 咸宁 黄石 仙桃 随州 天门 荆门 潜江 鄂州 神农架
  • 山西
  • 太原 大同 运城 长治 晋城 忻州 临汾 吕梁 晋中 阳泉 朔州
  • 辽宁
  • 大连 沈阳 丹东 辽阳 葫芦岛 锦州 朝阳 营口 鞍山 抚顺 阜新 本溪 盘锦 铁岭
  • 黑龙江
  • 齐齐哈尔 哈尔滨 大庆 佳木斯 双鸭山 牡丹江 鸡西 黑河 绥化 鹤岗 伊春 大兴安岭 七台河
  • 内蒙古
  • 赤峰 包头 通辽 呼和浩特 乌海 鄂尔多斯 呼伦贝尔
  • 贵州
  • 贵阳 黔东 黔南 遵义 黔西 毕节 铜仁 安顺 六盘水
  • 甘肃
  • 兰州 天水 庆阳 武威 酒泉 张掖 陇南 白银 定西 平凉 嘉峪关 临夏 金昌 甘南
  • 青海
  • 西宁 海西 海东 海北 果洛 玉树 黄南
  • 新疆
  • 乌鲁木齐 伊犁 昌吉 石河子 哈密
  • 西藏
  • 拉萨 山南 林芝 日喀则
  • 吉林
  • 长春 白山 白城 延边 松原 辽源 通化 四平
  • 宁夏
  • 银川 吴忠 中卫 石嘴山 固原
SiteMap
网站地图
TAG标签
Copyright © 2017-2025 TYWEB.NET 宿迁腾云网络科技有限公司 ALL RIGHTS RESERVED.   苏ICP备17033535号-1

热门搜索

百度 下载 2025 2024 2026 货源 货货源 虚拟 禅道 报名 金蝶KIS旗舰版
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

精品模板
建站费用
成功案例
联系我们