当前位置:科技动态 > 为什么 PHP 被认为是草根语言?

为什么 PHP 被认为是草根语言?

  • 发布:2023-10-05 15:56

为什么 PHP 被认为是草根语言?

下面的文字并没有包含很多技术词汇,所以对PHP感兴趣的人都可以阅读。

PHPer 是草根?

自从PHP诞生以来,PHP就开始为广大的Web应用程序员服务。同时,PHP作为一种为Web开发量身定制的脚本语言,一直坚持简单、开源的思想,这也使得PHP得以快速发展,有力地推动了Web 2.0的出现和发展。然而,长期以来,PHPer(PHP程序员)被认为是草根程序员,技术含量少、水平低的程序员。在国内尤其如此。

我记得有位技术总监说过这样的话。他给一个程序员分配了开发PHP的任务。没想到,程序员居然说:“我是Java学生,你让我写PHP,这不是贬低我吗?”。这件事给我留下了深刻的印象,触动很大。虽然这并不代表大多数程序员的观点,但这样认为的人应该不少。还有人说,如果现在是大型政府项目,PHP肯定不会纳入考虑范围。

那么为什么 PHPer 被认为是草根级别呢?是不是因为它很简单,人人都能学会,所以不难?我曾经也这么认为。 PHP上手很快,处理文件、数据、远程连接、网络编程都非常方便。官方还表示,学习PHP的成本非常低,所以你很容易使用它。这种想法也很常见,甚至大多数 PHPers 自己也这么认为。

说到这里,我想大家就会想到我为什么写这些话了。因为一年多的PHP推广工作让我了解了很多使用PHP的公司的大概情况。在这些过程中,我慢慢认识到了根本原因。我这里所说的根本原因是我个人的看法,但我认为这就是事实。

那么为什么PHPer被视为草根呢?根本原因是 PHPer 所做的大部分事情(通过代码实现)都是表示层的事情。熟悉 PHP 的人都知道这一点。当然也会有PHP会讲MVC结构写的某个框架的功能。但这些仍然是表示层。因此,只与表现层打交道的程序员被视为草根。事实上确实如此,因为在这种情况下PHP想要构建大规模的应用程序确实很难。

所以,事实并非如此。为什么PHPer总是负责表示层?答案是我们一般不接触底层的数据处理(Web应用程序就是数据存储和搜索)。好吧,说到这里可能有人会想,那不就是一个数据库吗?是的,就是数据库。让 PHPer 一直停留在基层的罪魁祸首就是数据库。为什么?

PHPer 过于依赖 MySQL

因为目前流行的Web架构中,前端是负载均衡系统,中间是Web服务器,后端是数据库服务器。因此,大多数 PHPer 都工作在 Web 服务器级别。因为数据库已经很好的帮我们组织好了数据。所以PHP中的算法并不多,大家潜意识里都觉得不需要,更何况会影响性能。

这样的话,PHPer就成为了数据库用户,他始终在操作数据库。而不是做一个程序。最简单的PHP脚本之一就是连接数据库,取出数据,然后使用命令将其输出到浏览器。整个过程不超过10行代码。感觉好像太简单了。没有什么技术含量。为什么呢,因为数据处理部分已经由数据库完成了。尤其是MySQL的使用。 MySQL是免费的,因此大多数程序员都可以自由使用它。另外,MySQL足够快,因此制作PHP应用程序非常简单。这就相当于给你一把枪,你觉得没有必要学武术。当然,我并不是说枪不如武。相反,随着枪支的出现,孩子们可以轻松便捷地杀人。

我们来详细说说为什么是数据库。这里我举一个例子。我去了北京一个非常有名的网站。当时我们有一个比较资深的PHP程序员在讲系统架构。我记得当程序员问大家一道数据结构中的算法问题时,全场没有人能回答出来(包括我)。然后程序员就开始给大家讲一些非常基础的数据结构。让我回想一下我大学里学的数据结构课。这些基本的数据排序、搜索和传输问题在其他高级语言(例如 C)中很常见。但在 PHP 中则不然。 www.sychzs.cn论坛还有一个版块叫做PHP数据结构与算法。这个版块的帖子也很少。
说到这里,你明白了吗?大多数 PHPers 只处理表示层的事情。借助MySQL的便捷使用,PHPers无需接触任何数据结构和算法就可以完成大部分开发任务。这就是为什么只有一个人可以回答上述问题。没有一个PHP程序员能够回答如果出现了数据结构的问题,改用C这样的语言,情况可能就大不一样了。正是PHPer的草根,才让PHP显得草根。

仔细想想,网上讨论最多的有两个问题。一是PHP类的使用(处理程序的封装),二是开发框架问题。但如果我们仔细分析,我们发现PHP中这些所谓的相对复杂的概念中并没有数据处理。为什么,有一个数据库。可以使用 Adodb 或 PHP5 PDO 来完成。真的完成了吗?不,这些只是连接数据库,并没有进行数据处理。所以 PHPer 似乎没有什么可以拿出来的。

我们来说一个具体的编码问题,无级分类。我想每个人都熟悉这个概念。我见过两种方式。第一种是正宗的PHPer处理方式,目前也比较流行。只需使用数据库来处理即可。而且字段很少。只需要添加父类的一个字段并进行判断即可。而且这个方法非常实用。效率也很高。但这不是数据处理的范围,而是数据库搜索的范围。

第二个是由 C 程序员使用 PHP 编写的。他从数据库中取出所有的分类信息,然后用数据结构算法进行排列和分配,然后输出。

这里我们不比较这两种方法的效率。我想每个人都有自己的想法。但我想澄清一个问题,这就是这两种做法的本质区别。 PHPer习惯使用数据库进行处理,它的处理方法非常巧妙,效率很高。这个方法就是数据库查询。第二种方法比较有特色。他认为数据库是存储数据的地方,具体的逻辑处理取决于你自己的逻辑。

所以结论是第二种方法的使用者感觉更强,因为数据的逻辑是他组织的。而我认为PHPer的做法无非就是查询数据库而已。所以他认为PHPer是草根,只会操作数据库和排列页面(聪明的那种)。

让数据库恢复原来的工作

说到这里,想必大家都回想起了很多自己平时用PHP进行开发的经历。你有没有发现,大家确实都在操作数据库?

那么我们来讨论一下这个问题。是不是数据库坏了?为什么我使用数据库处理数据没有问题?我说的是数据库出了问题,而且问题很大。当然,我这里并不是说不能使用数据库,也不是贬低数据库的性能。相反,我们并没有完全认识到数据库所扮演的角色。

我的想法源于这样的事情。有一次,一个网站的技术总监问我为什么他们的网站这么慢,应该怎么办。当时我的MSN里Zend总部的工程师正好在线,我就问他如果PHP响应慢怎么办?他当时直接告诉我是数据库的问题。肯定是数据库没有优化设计好。所以我没有给技术总监明确的答复,因为我们无法参与他们的数据库设计。所以我给出了一些通用的数据库优化建议。这种情况反复发生,我开始奇怪为什么Zend总部的工程师每次都告诉我是数据库问题。难道我们就不能从PHP层面解决这个问题吗?答案是不。由于PHP目前运行速度非常快,通过Zend的性能分析也可以看到用户的点击情况。 PHP的运行时间还不到10%,那么PHP在做什么呢?它正在等待。等待数据库查询结果。这方面在目前的PHP产品中已经有了很大的改进,即Caching和网页静态化。

缓存对于大家来说可能比较陌生,但是网页静态化现在即使对于PHP产品的用户来说也是非常清楚的。速度快、容易被搜索等等,好处不言而喻。开玩笑地说,要实现网站首页的静态网页,硬盘只要足够大就可以了。 J 至于Caching,则比较复杂,也是大多数PHPer比较头疼的问题。有些人甚至用C来实现。因为Caching中的数据有效期验证、查找、提取、更新等处理起来比较困难。当然,有些人会使用数据库来处理Caching问题。

所以,当访问量激增时,PHP结构的网站会出现的很多问题都是由数据库引起的。数据库同步问题并不是什么大问题。关键是数据库的响应速度会成倍下降。这个问题我在10月23日的LAMP会议上问过MySQL的副总裁,他当时并没有给我一个完美的答案(这是我所预料的),因为数据库永远都会有瓶颈,除非是神仙数据库,哈哈!

这里扯个题外话。当我在LAMP会议期间与Yahoo的一位技术主管聊天时,我问他Yahoo在选择MySQL或Oracle时的考虑因素。他的回答让我非常惊讶。他说,大多数时候我们会使用MySQL,因为它的性能已经满足我们的要求。但我们什么时候会选择Oracle呢?这时候我们就需要存储付费用户的数据。我问为什么,Oracle比MySQL稳定吗?他表示对此没有特别考虑。关键是,如果我们使用Oracle,出现问题时我们可以找到负责人,Oracle会负责处理该事件。但是如果我们使用MySQL,我们该找谁呢?

所以,我们对数据库的看法应该纠正一下,也就是说数据库并不是万能的。如果有能力的话,开发自己的数据库。我听说谷歌就是这样的。

那么我们如何看待数据库呢?我个人的理解是数据库只是降低开发成本的一种手段。因为使用数据库之后,我们就不需要考虑数据的存储,尤其是排序和查找。但这会导致什么问题呢?当业务规模扩大时,数据库就成为瓶颈。这个时候问题就会非常困难。因为这是底层的数据处理。一个动作就会影响全身。

所以我认为正确的观点是数据库是一个数据备份机。怎么理解,我们只需要保证数据存储的有效性即可。这原本是数据库的核心功能,但是因为数据库方便的排序等功能,大家不得不把太多的处理留给数据库。当用户点击PHP时,很多任务都会交给数据库,然后将结果排序后交给用户。这对于数据库来说是不公平的。这就是为什么每个人都开始抱怨数据库的性能。
关于这个观点,我们再举一个例子。有一次我参观了一家大型互联网公司(基本上国内接触过互联网的人都知道)。他们很少使用PHP,但我了解到他们的其他业务是如何使用数据库。他们自豪地向我介绍,他们在数据库之外还有第二个数据库(我这里称之为第二数据库)。为什么叫第二数据库呢?原来它是一个缓存系统。那么开发工程师如何从这个缓存系统中获取数据呢?技术总监自豪地说,他们的缓存系统有SQL查询语句。当时我很惊讶,但后来我想我真的需要这个。因为当你的缓存系统达到一定程度后,从缓存中获取数据就变得非常复杂。只需编写一条SQL查询语句,让缓存系统分析、处理并返回数据。而且他们告诉我,在他们的地方,即使使用PHP,也会要求PHP从缓存系统中读取数据。

所以,如果你能处理这个问题,将数据存储在数据库中,那么数据库就只起到备份的作用。然后您使用自己的中间层来处理分析数据。效果是90%以上的用户不访问数据库。有人会说,这不是类似于连接池的东西吗?是的,因为数据库的瓶颈无法解决,所以我们只能在Web服务器和数据库之间加一个中间层来做缓冲。

也许你会说,啧,我们早就知道了。好吧,这里我想说的是它引发的两个思考:
首先,有些语言已经有了连接池技术,程序员可以很方便地使用连接池来构建大型应用程序。那么如果他们认为PHPer只会使用数据库,我们是否可以说他们只会使用连接池呢?连接池和数据库在概念上有什么区别?

其次,当PHPer开始搭建自己的缓存系统时,是否突破了PHPer只会使用数据库的关卡?因为他涉及到数据逻辑的处理。那么他还是草根人吗?

最后,懂得独立思考的PHPer并不是把一切都交给数据库的草根人。

原文

相关文章

热门推荐