Java开发经验:8年+。 
PHP开发经验:<3个月。

想做一个网站,因为有多年的Java经验,所以一开始自然是想用 Struts+ibatis,虽说 Java Web 开发配置挺繁琐的,但有多年的积累,自然也不是大问题。

在筹备的过程中,逐渐发现,我要做的网站,最好是基于一个成熟的CMS或者WIKI系统做定制,否则白手起家工作量太大,可是,经过对比选型,我发现在这方面的开源领域,Java阵营毫无抵抗的输给了PHP阵营

痛苦啊,抉择啊,我想选PHP吧,Drupal 或者 Joomla,但又担心从头搞定PHP耗时太长,于是希望能够混搭使用,也就是偏重前台展示的部分,使用PHP在Drupal上定制,而偏重后台业务逻辑的,使用Java开发,两者之间用 Web Service 互通。

但是,这种混搭风也有问题,那就是开发的复杂度高,从环境搭建到测试,都麻烦,而且Java很耗资源,对虚拟主机的要求高,所以,最终在这个项目上放弃了使用Jaa的念头(至少是暂时的),完全转向了PHP。

用PHP写代码的过程中有些感悟,总结如下:

上手复杂度:PHP胜 
我用 Java 做了 2-3 年的 Swing 开发,然后转向WEB,第一个接触的框架是 Struts,当时的感受就是要配置的东西太多了,前后鼓捣了三个多月,才感觉渐入佳境了。

如今PHP从开始了解到现在总共三个月左右的时间(而且只是业余时间),其中有一周的时间在看PHP官网的文档,了解主要的语言特性,后面基本上就是边看边改代码,并照猫画虎的写东西。虽说当年对软件开发的理解不能和今天相提并论,但客观的说 ,PHP的确简单、易学,而且特别适合做WEB开发。

开发感受:各有胜场 
PHP最让我不爽的地方: 
    经常是出错后屏幕一片空白(White Screen Of Death,都有专有名词了,可见这是PHP出错表现的一大特性),什么信息都没有。  
    开发工具的auto complete能力远不如java。

PHP比较爽的地方: 
    php中,数组和哈希表等价,而且是使用最广泛的数据结构,变长参数+数组做参数,能大大提高写代码的灵活性。 
    基本上不用为NPE担心。 
    访问数据库比JDBC简单多了,不用什么持久化框架也能很快的写出类似DAO的代码。 
    许多专为WEB设计的特性,使得从页面获取信息,或者向页面输出信息都变得非常轻巧。

谈不上爽或者不爽的特性: 
    echo 的内容直接到前台页面上了,一开始我以为echo和java的System.out一样,会写到日志。 
    由于不像Java那样对classpath以及class的路径有着严格的要求,一时之间还不习惯,原来创建一个Java类放在什么地方基本上没什么可考虑的,但现在经常要决策一个文件该放在哪个目录下。 
    因为可以OOP,也可以不OOP,所以,增加新功能点的时候,经常很纠结O还是不O。 
    代码风格啊!太习惯了getData这样的命名,是在不适应get_data这样的函数,因此,执着着,没有入乡随俗的改过来,也好,一眼就可以看出,哪些是属于框架的,哪些是属于我的。

平台对比 
如果拿PHP和JAVA比,我觉得PHP是瑞士军刀,而JAVA则是家庭五金维修工具N件套,N >= 100,在解决网站开发这一问题上,PHP的确是小巧、易用,但也有不尽如人意的地方。

比如,我发现J2EE中几乎必不可少的JDBC连接池,在PHP中约等于无,所以,用户请求过来,如果需要访问数据库,都是现连、现取、现关,究其原因,是架构不同造成的。

实际上,J2EE中有Web Container的概念,用户请求是由Container分配的线程完成的,线程可以使用进程的内存空间交互数据;而PHP是依附于Apache的,每次用户请求,Apache都启动一个新的进程来执行PHP脚本,进程执行完,一切资源都回收了,所以在默认情况下,一个PHP脚本想要留下点“全局”的东西并不容易(我一开始就被 global 这个关键词给骗了);当然,也不是说不同的请求之间完全没法交换数据,只是这样需要使用共享内存,或者使用文件做持久化。

不过,Apache用进程处理请求应该比线程模式要更加健壮,因为在J2EE中,因为一个线程的问题导致整个Container挂掉的情况屡见不鲜。

OOP 
PHP主流版本已经对OOP的支持很好,但因为历史原因,好多PHP的开源项目的代码都是不那么OOP的。一开始,我是跟着框架的习惯,用不怎么OOP的方式写代码,在写了十几个零散的函数之后,终于忍不住,又全部重构成对象了。

做了这么多年的Java,OOP的思想已经非常深入,虽然当年从学校出来的时候,也是从结构化程序设计转向面向对象的,但N年之后,再从面向对象转向结构化,这种不习惯的感觉更加强烈。也许是OOP真的是更加符合自然的思考习惯吧,现在看着一长串的零散的函数,很有一种不安全的感觉,况且还要挖空心思的为方法起名,以避免冲突,累!

总结 
1、应该把PHP纳入自己的开发工具箱 
2、PHP不够完美,但可圈可点之处甚多。 
3、面向对象为PHP增色不少 
4、在开源领域,PHP方面比较发达的是最终应用,所以才有那么多人使用wordpress建独立博客,哪怕没有开发经验;而JAVA方面比较发达的是开发框架和类库,给程序员们使用的。从这个角度来讲,Java是个小众的语言。