>백엔드 개발 >PHP 튜토리얼 >为什么说PHP是首选的Web开发语言?

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

WBOY
WBOY원래의
2016-06-20 12:40:46954검색

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

2016.01.08 22:59:56

不知何时开始,程序员把一致的调侃送给了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

    <?phpheader("HTTP/1.1 404 Not Found");include("404.html");exit;?>

    404.html

    <!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="utf-8"></head><body>    <p>404页面。</p></body></html>

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

    public ActionResult Details(int id){    return HttpNotFound();}

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

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

    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)也就并非适合每一个业务场景, 服务端视图模版还是有比较多的适用领域的。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.