嘿,我最近接到一个网站开发的项目,不过老实说,我这两年没怎么接触编程,据说 Web 技术已经发生了一些变化。据说你是这里对新技术最了解的开发工程师?前端
你算是找对人了。我对今年的技术别提多熟了, VR 、机器学习、守望先锋……你尽管问吧。我刚去了几个热门的技术大会逛了一圈,没有什么新技术是我不知道的。git
厉害。是这样的,我要开发一个网站,用来展现用户的最新动态。我想我应该经过后端接口获取数据,而后用一个 table 来展现数据,用户能够对数据进行排序。若是服务器上的数据变化了,我还须要更新这个 table 。个人思路是用 jQuery 来作。程序员
可别用 jQuery !如今哪还有人用 jQuery 。如今是 2016 年了,你绝对应该用 React 。github
等等,这句话以前已经有一位前端大神和我说过了,我今天主要是想问你后端该怎么作。面试
哦原来是这样,你提到了 Smarty ?你后端语言是 PHP 对吧,如今哪还有人用 Smarty 。如今是 2016 年了,你绝对应该用 Twig 。数据库
Twig ?也是一个模板引擎吗?编程
是的,可是 Twig 的语法更加优雅,使用更方便,速度也快,并且许多开发框架都支持把 Twig 做为模板引擎,和框架的整合也作得更好。json
好吧那我用 Twig ,请问在哪里下载?后端
你不用本身下载安装,只须要在你项目的 composer.json 文件中添加一个依赖,而后 Composer 会帮你安装。api
等等, Composer 是什么?
Composer 是一个以 PSR-4 标准进行自动化包管理的工具,用它能够方便的进行各类第三方软件的依赖管理和下载、更新等操做
PSR-4 ?
对, PSR-4 是 PHP-FIG 组织提出的多个为了统一项目规范的标准之一,是用来规范 PHP 项目的 Namespace 、目录结构、加载规范的。
那除了 PSR-4 以外还有什么?
还有用来规定代码风格的 PSR-1 ,以及 PSR-1 的扩展版本 PSR-2 ,还有用来规定日志的 PSR-3 ,用来规定缓存的 PSR-6 ,用来规定 HTTP 头消息的 PSR-7 ,以及……
等等,怎么没有 PSR-5 ?
有的,但 PSR-5 还处在草稿阶段,没有正式发布,因此我没有讲给你听。
有 PSR-8 吗?
有的,如今一共是到 PSR-0 到 PSR-17 ,但我没提到的那些大部分都在草稿阶段,因此同上,我没有讲给你听。
好吧好吧,我用 Composer 行了吧。
等等,在你用以前,我建议先配置一个镜像,由于 Composer 的服务器在国外,直接使用常常会出现问题,对了若是你的项目比较大的话,可能第一次使用要 FQ 才能使用。
为何?
由于虽然软件的版本信息是存在 Composer 的服务器上的,但有大部分软件的 zip 文件是存放在 github 或者别的什么地方的。
好吧这些我都搞定了,我想开始写代码了,据说 Zend Framework 挺有名的?
如今是 2016 年了,没人再用 ZF 了。如今比较流行的 PHP 框架有 Symfony 、 Laravel 、 YII 、 Codeigniter 这些,若是你对性能要求比较高或者想开发一些 Socket 相关的功能的话,能够试试看 Phalcon 、 Yaf 、 Swoole 、 Workerman 、 ReactPHP 这些,对了最近还有个叫 Kraken 的框架在 Github 上比较火,但我尚未试过。
有没有国内用的比较普遍的框架?
ThinkPHP 刚刚推出了支持 Composer 的 5.0 版本,但我建议你再观望一下再决定是否用。
我之前据说最新版本是 3 ,怎么如今是 5 了,请问 ThinkPHP 4 去哪里了?
这个套路你还不明白吗?请问你用过 Java 2/3/4 或者 Windows9 吗?
好吧,确实没用过,不过我懂你的意思了。我能够开始写代码了吧? Editplus 我早就装好了
可别用 Editplus !如今哪还有人用 Editplus 。如今是 2016 年了,你绝对应该用 PHPStorm ,很是好用,同类的还有 NetBeans 、 Zend Studio 但如今已经没什么人用了,若是你喜欢简单一些的工具,能够用 Sublime 、 Atom ,或者像咱们公司的程序员 MM 同样直接用 VIM 。
程序员 MM ?
是的,对了咱们公司在漕河泾,有兴趣能够投个简历给我 hongt@xieche.net ,有机会在面试时和程序员 MM 直接交流。
好吧好吧…随便问问,反正我有女友。对了请问代码该怎么调试呢?我之前用 Editplus 的时候都是在代码里写 var_dump 和 die 的。
如今哪还有人 var_dump() + die()。如今是 2016 年了,你绝对应该用 Ladybug 。
Ladybug?
对,相似 var_dump + die ,可是更加好用,可以把要 dump 对象里的内容展现的清清楚楚,配合 Xdebug 你甚至能够在 IDE 里进行断点调试、临时更改变量的值等等
Xdebug?
是的,一个 PHP 的调试工具,安装以后能够像调试 Java 、 C 那样调试 PHP 。
看起来好高级的样子,但我程序还没开始写呢,我听人说写代码第一步是要建数据库?
没错,但如今已是 2016 年了,没有人直接用客户端连上数据库去建表了,你们都在用 ORM 工具管理数据库。
什么是 ORM ?
ORM 可让你像操做类同样去操做一个数据库,知名的 ORM 工具备: Doctrine 、 Propel 、 Eloquent 这些。
难道我不能直接写 SQL 吗?
能够固然是能够的,但如今是 2016 年了,没人直接写 SQL 了。并且若是直接写 SQL 的话,安全性怎么办?若是字段作了变动怎么更新全部现存的 SQL ?代码的部署回滚怎么和数据库绑定?并且用了 ORM 以后你能够很简单的就建立出一个表的 CRUD 表单,甚至能够很简单的写几行代码就实现对这个表的各类 API 操做。
听上去很不错啊,能举个例子吗?
好比我最经常使用的 Doctrine ,只要我用 PHP 类去定义一个表的实体结构( Entity ),我就可让 Doctrine 自动生成这个表的 DDL ,即便个人表结构有变动, Doctrine 也会帮我生成所对应的 update 表结构的 DDL 。 Entity 在每一个字段上均可以进行设置,设置完我就能够生成一个对这个表进行操做的 CRUD 表单,假设某个字段我设置的是日期类型,这个字段在 HTML 里就会被自动生成并映射成为一个包含三个下拉框的组件,而这三个下拉框分别是年月日。
好酷炫,那还有别的用处吗?
多了去了,每一个网站都有后台吧,使用了 Doctrine 的话配合一些工具,只要写几行代码就能够生成基于表的后台管理界面,实现一个基本可用的网站后台。但须要注意 Doctrine 通常是以 Service 的方式被用在项目中的,你直接用 Doctrine 并不会很方便。
Service ?
是的,你能够理解为一系列的你代码中可能会用到的第三方应用,他们都经过 Service 的方式被注册到程序中,你在用到某个功能的时候,只须要对他们进行调用便可,就像调用一个函数那么简单。 Service 通常都会支持 IoC 和 DI ,因此对你未来程序的升级也会颇有帮助。
IoC 和 DI ?这不是 JavaEE 里面常常用到的东西吗?
没错,但 PHP 项目中如今也在大量使用 IoC 和 DI ,好比 Symfony 和 Laravel 中就都有很是强大的一套 Service 系统,实现了 IoC 和 DI 。
好吧不明觉厉,可是个人开发环境尚未呢,是否是先装一个 XAMPP 吗?
如今是 2016 年了,没人还在用 XAMPP 了。你至少得用个 Vagrant 或者 Docker 吧?否则你的代码准备怎么部署?开发环境和生成环境怎么保证统一?难道你准备直接用 FTP 传源代码文件吗?
er ……是的,难道不该该用 FTP 传代码吗?
如今是 2016 年了,没人还在用 FTP 直接传代码了,最差你也得用个 rsync 吧?你可能没有 Vagrant 或者 Docker ,但至少应该尝试用一个部署工具并配置一套部署脚本,好比 Deployer 、 Capistrano 、 Ansible 、 Fabric 等等,若是配合 CI ,自动检查代码、部署那就更完美了。
CI ?
对, Continuous Integration ,指的是自动化处理分支的合并、运行测试用例、代码检查、部署等操做,你能够用 Jenkins 本身搭一个,也能够用 Bamboo 或者 CircleCI.com 。为了及时知道代码的 CI 结果,你能够把你的 CI 系统和 Slack 、零信等 IM 工具作整合,这样的话你就能够灵活的在团队里分享并自动化处理各类信息。
能举个例子吗?
好比代码若是在线上出了错,系统能够自动定位到某一次提交,而且发送邮件给改动人。好比服务器负载高了能够自动水平扩展服务器架构。
水平扩展服务器架构?
水平扩展的意思就是服务器配置不变,可是数量增多,相对应的垂直扩展就是服务器的性能变高,可是数量不变。
那具体是怎么作到的呢?
首先你的程序架构要支持水平扩展,好比 session 和数据库不能存放在单机上,固然还有一些复杂的注意事项暂且不提。其次是你的服务器架构要支持水平扩展,若是你用的是云服务,通常都会有水平扩展的 API ,直接调用就是了。
听起来好复杂,个人网站暂时应该不会有流量问题,但若是程序出现问题怎么办,有什么办法能及时通知到我吗?
如今是 2016 年了。通常的作法是搭建一套 ELK 系统进行日志的存储、搜索、展现。
ELK ?
对,就是 Elasticsearch 、 Logstash 和 Kibana 三个软件的缩写,由于你们都常常固定用这三个组合,因此缩写成了 ELK 。固然若是你不想那么麻烦,能够用 Sentry ,或者再简单点本身搭建一个 Log.io
你别扯远,我就想简简单单跑一个 PHP 的运行环境,据说 Facebook 公司曾经出了个叫什么 HipHop for PHP 的东西?
没想到你还懂得挺多, HipHop 是 Facebook 出的一款用来加速 PHP 运行的软件,核心原理是把 PHP 代码编译成为一个能够直接执行的程序。并且如今已是 2016 年了,没人再用 HipHop 了。如今至少你得用 HHVM ,或者 PHP7
HHVM ?
是的 HHVM ,由于 HipHop 须要编译才能用,每次 PHP 代码改动都须要从新编译,很是麻烦,因此 Facebook 转而作了 HHVM 。核心原理差很少,但 HHVM 再也不须要编译过程,能够直接执行 PHP 文件了,基本上你能够理解为 HHVM 是一个超级加速版的 PHP 。