[关闭]
@phper 2015-04-14T10:31:35.000000Z 字数 1869 阅读 6168

为什么说PHP是首选的Web开发语言?

转发


转发自2gua大神的知乎专栏:http://zhuanlan.zhihu.com/guagua/19904737


不知何时开始,程序员把一致的调侃送给了PHP,“尊称”其为“神语言”,并且PHP总被冠以“代码凌乱”、“漏洞不少”的不良名称。在我所接触的Web开发技术如:Rails、ASP.NET MVC、Java Web、Django、Sinatra以及PHP中,PHP应该是首选Web开发语言。请注意,这里的“首选”不是“最好”的意思,而是开发工具栈学习选型过程应该优先考虑的技术。

为什么这么说呢?理由一下子在脑袋里冒出了好多条,姑且梳理下吧:

1. PHP是为Web而生的,天然与HTML、JavaScript有亲近感,也就是原生味儿十足。即使是PHP与HTML代码混杂,从某种角度而言,也能帮助初学者直观地了解Web技术机理,坏事有时候也是好事。另一方面,开源PHP的C风格、Unix/Linux范儿让其在Apache、Nginx等Web应用服务器上表现优异。总之,PHP与Web是浑然天成的结合方式。

2. 要掌握PHP,我建议从备受诟病的“代码凌乱”编程风格 -- 或许是从PHP与HTML混合编程开始,待直观了解Web开发技术之后,再考虑代码组织和结构的重构,这样有助于自己以更加原生的方式掌握Web的秘密。那么,什么是更加原生的方式呢?随手举个例子:典型的404状态码。

用PHP的实现(404.php、404.html):

  1. <?php
  2. header("HTTP/1.1 404 Not Found");
  3. include("404.html");
  4. exit;
  5. ?>
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="utf-8">
  5. </head>
  6. <body>
  7. <p>404页面。</p>
  8. </body>
  9. </html>

再看看如ASP.NET MVC中的实现:

  1. public ActionResult Details(int id)
  2. {
  3. return HttpNotFound();
  4. }

虽然封装得很好,但是,跟PHP方式比较就知道,http://ASP.NET MVC中的实现确实比较抽象不够直观,而且是在控制器里直接定义和跳转的。在PHP中,显而易见,一下就明白了代码中header的含义:HTTP-VersionStatus-CodeReason-Phrase

顺带说说Rails中的处理方式,抽象程度也很高:

  1. render :template => '......', :status => 404

3. 与PHP类似的还有JSP,但JSP往往需要与JEE其他技术模块相配合使用,体系足够庞大,需要有长期准备。其他如ASP.NET MVC、Rails等框架的抽象度较高,也不建议作为首选。

4. 不得不提Node.js,Node.js是目前很火的技术,号称“全栈”的希望所在,常拿来跟PHP争论比较:什么并发、线程、进程等等。在这里无意评论孰优孰劣,但至少PHP可以让你多掌握一门技术,而不止是JavaScript。此外,PHP的大型业务的成熟应用案例可是比比皆是吖。

5. 那么,是不是该一直坚持指哪打哪的“代码凌乱”方式呢?当然不应该。PHP提供的OOP特性足够强大,在技能与理解程度达到一定高度时,完全可以以OOP的方式来组织代码。在PHP领域,各种框架非常多,比如Laravel、CI、FuelPHP、Yii、Symfony、Zend Framework等等,届时随便选一个都可以进行规范化开发。“代码凌乱”关键不在于工具本身,而在于人自己!要知道用Java也能写出烂代码。

6. PHP的资料非常丰富。

7. 最后,有一个稍稍题外话的看法,早前我还觉得在RESTful方式不断普及下,由于RESTful Web Services使用标准的 HTTP 方法(GET/PUT/POST/DELETE)来抽象Web服务能力,服务端的重点将移至MC,而服务端视图模版的应用会减少,客户端的支撑需求会越来越多。比如各种前端库、框架将得到快速推进,越来越多的需求处理会前置到前端来处理。但现在我感觉这种状态考虑得太过理想了,就像数据频繁大量更迭及处理的场景,更适合服务端(如模版引擎)完成;再具体地,又如大数据量的分页,如果都在浏览器中实现,性能就一定会有很大问题。此外,频繁Ajax调用、客户端缓存机制的缺失,也将引起种种问题,再进一步来看,单页面应用(SPA)也就并非适合每一个业务场景,服务端视图模版还是有比较多的适用领域的。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注