PHP:风雨欲来 路在何方?


Posted in PHP onOctober 09, 2006

PHP4:奇迹背后

1995年时,Rasmus在用PHP写他的个人主页;今天,PHP成为风靡全球的脚本语言,越来越多的站点选择使用PHP,连Yahoo都放弃了自己的脚本而改用PHP支持它的网站。可以说,PHP是一个奇迹。我一直认为,任何奇迹背后都有它的原因。现在,就让我们透过这个奇迹,来看看PHP的成功之道。

1 简单易用

PHP的入门门槛很低,它对使用者的要求微乎其微。学过C语言的人,使用PHP几乎不需要什么时间。它们的语法是如此相似,以至于我常常想,是不是在C语言变量前加个$就能改成PHP。这使得大量C程序员在网络脚本中选择了PHP。另外,比起ASP的组件系统和Java庞大的类库来,PHP的函数库要好学多了。在编程风格上,PHP更是自由,你可以使用N种风格来写你的脚本程序。这些特性使得PHP成为初学者的首选语言。抢占初学者市场是很重要的策略。如同任何人都会对自己的初恋记忆犹新一样,人们往往会对最初学习的语言有很深的感情。即使后来自己成长了,改用其他语言了,还是会时时记起最初学习的语言。在这点上,PHP做得很出色。

2 剪裁得当

PHP开发组是最了解网络的一群人,他们非常清楚用户要的是什么。PHP就是要做一个出色的网络脚本语言,而且,它只是要做一个网络脚本语言。PHP提供的函数集在网络方面相当强大,而且重点均专注于网络应用。像PHP中的无组件文件上传,超多数据库支持等特性都表现出这个特点。顺便说一句,PHP甚至支持ACCESS数据库。专注使得PHP在网络上表现出极其优秀的性能。有失才能有得。

3 支持强大

PHP有强大的OpenSource团体支持,在网络上有数以万计的开源代码。你可以整合几个现有程式来实现你的应用,也可以分析大师级的代码来得到提高。PHP还有很多扩展性的项目来增强PHP在某个方面的功能。像注重编程规范化和代码重用的PEAR,提供可编译模板技术的Smarty,甚至开发桌面程序的GTK。

分析完这几个理由,我们可以看出,PHP的成功得益于PHP开发组的战略眼光。PHP提供了一个最小工作集,使用户能用最简单的方式高效地完成自己需要的应用。这正是初学者需要的。然后它通过方便的扩展来提供各个方面的解决方案,这样,你只需要学你要用到的那个领域的东西。当你涉及的领域越来越多时,你的水平也随之提高,当你熟悉了大多领域时,回头看看,会发现不知不觉已到山腰。PHP也提供了我们一种学习态度。

ASP.net+J2EE:风雨欲来

网络脚本界的革新浪潮由Microsoft的ASP.net首先发起。在ASP.net中,有一个很吸引人的东西——事件驱动机制。这在桌面编程中是很普通的概念,而在脚本编程中事件驱动意味着对服务器端的脚本(如PHP、JSP、ASP)和客户端的脚本(如JavaScript和VbScript)进行封装,使之协同工作。这样一来,编程就会变得异常方便。在.net环境中的事件驱动还有一个优势,就是你甚至可以不会任何服务器端脚本和客户端脚本,因为在ASP.net中,是可以直接使用C#这样的语言的——连$都不用加。这为MS阵营的传统程序员转向网络开发铺平了道路,同时,也使PHP在初学者市场上受到很大的打击。可以预见,以后的传统程序员转向PHP的将大为减少。不过ASP.net最大的问题在于它只能在Windows上运行,而现在大陆正在大力发展Linux。这使得PHP的生存空间似乎宽了点,但是——让我们来看看Java吧。

Java也是一个奇迹,1995年发布第一个版本,现在形成三个版本,分别覆盖嵌入式系统(J2me)桌面程序(J2se)和服务器(J2ee)三大应用领域。更重要的是,Java得到了绝大多数程序员的认可,现在世界上最出色的计算机书籍多是以C++或者Java作为描述语言的。Java几乎像C一样,成为一种信仰。所以,我们不要妄想Java阵营的程序员会转向PHP。同时,在同是开源和跨平台的Java面前,PHP丢掉了不少优势。J2ee中的JSP又在初学者市场对PHP造成相当的压力。

在曾经使PHP成功的初学者市场、易用性和开源支持等方面都受到挑战,而随着机器性能的不断提高,大家对效率的要求渐渐降低的情况下,可以说,PHP要在ASP.net和J2EE的狭缝中生存并壮大,是一件很不容易的事情。

而PHP本身还有不少问题。像低层用户过多。大量的开发者处于入门阶段,不知道如何提高自己,导致大量开源代码不规范和低效率,而又会又下一批初学者从这些糟糕的代码中学习,如此递归。另一方面,高阶用户却因为PHP的面向对象特性不完整等原因而不得不转向其他语言以开发大型应用。

PHP5:浓浓咖啡味

PHP开发组在今年年中发布了PHP5的BETA1,我们可以从中看见PHP的反击。首先,PHP4的开发仍然马不停蹄,而且我们可以肯定,PHP4的开发还将持续很长一段时间。这样做的目的是巩固既有用户,同时在将来的PHP4版本中逐渐融合部分PHP5的新特性,实现PHP4到PHP5的平滑过渡。

再来看PHP5的变化。在PHP5中,我们看到了太多Java的影子。OO体系几乎是COPY的Java的,这保证了PHP高阶用户不流失,使得他们能方便的使用最新的技术体系来架构自己的应用。另一方面,也为Java程序员使用PHP提供了方便,虽然这样的情况可能比较少。在完善了OO体系后,PHP具备了真正进入企业级市场的能力。然后PHP5也添加了不少自己的东西,像__get,来使这个体系更易用。不知道的是,这杯cappuccino是否会像Java般受欢迎呢?

从PHP5的改变中,我们看出了PHP将来的方向。一是和JSP竞争,争取在某一些方面取代JSP,成为粘合JavaBeans和Servlet的胶水。这要求PHP和Java之间建立更为紧密的关系。Zend小组正在参与JSR规范的指定。这个规范将使得你可以在PHP中直接new一个Java对象并调用它的方法。这样也能使PHP更快的进入企业级市场。另外,如果PHP编写的脚本能被直接编译成Binary Code在Jvm上运行的话,PHP的前景会好很多。另一个方向是做Java和.net间的集成,在一些大型的应用中整合已有资源。PHP4中我们已经可以调用com组件和Java对象,相信在将来PHP5将对此提供更多的支持。

不管怎么样,无论是和J2ee和.net竞争还是融合,PHP要走的,将是一条满是荆棘的路。不过既然PHP已经一路风雨地走到了今天,我们有什么理由不相信它能走得更远呢?

Best Wishes, PHP.

 

PS 这只是Easy对PHP将来发展的一点个人看法,可能不是很成熟,只是给大家一点参考。

 

PHP 相关文章推荐
国内php原创论坛
Oct 09 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
php读取文件内容的几种方法详解
Jun 26 PHP
解析php 版获取重定向后的地址(代码)
Jun 26 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
php生成带logo二维码方法小结
Apr 08 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 PHP
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 #PHP
用PHP实现登陆验证码(类似条行码状)
Oct 09 #PHP
用PHP创建PDF中文文档
Oct 09 #PHP
PHP与javascript对多项选择的处理
Oct 09 #PHP
3
Oct 09 #PHP
example2.php
Oct 09 #PHP
对盗链说再见...
Oct 09 #PHP
You might like
PHP开发过程中常用函数收藏
2009/12/14 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
python查看FTP是否能连接成功的方法
2015/07/30 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
python xpath获取页面注释的方法
2019/01/14 Python
python实现桌面气泡提示功能
2019/07/29 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
学生宿舍管理制度
2014/01/30 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
实习单位推荐信
2015/03/27 职场文书
2015年酒店工作总结
2015/04/28 职场文书
医院感染管理制度
2015/08/05 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python
解决MySQL报“too many connections“错误
2022/04/19 MySQL