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 中的面向对象编程:通向大型 PHP 工程的办法
Dec 03 PHP
php 截取字符串并以零补齐str_pad() 函数
May 07 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
curl实现站外采集的方法和技巧
Jan 31 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php制作文本式留言板
Mar 18 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
Symfony实现行为和模板中取得request参数的方法
Mar 17 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
Mar 22 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 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
投票管理程序
2006/10/09 PHP
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php中stream(流)的用法
2014/03/25 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
深入理解Python中range和xrange的区别
2017/11/26 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
大学自我鉴定
2013/12/20 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
小学教师岗位职责
2015/04/02 职场文书
个人承诺书格式范文
2015/04/29 职场文书
新生儿未入户证明
2015/06/23 职场文书
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis