本文旨在给要学习 PHP 的新手一个大概的认知轮廓,在心里有个学习的结构,有的放矢,避免走太多弯路。大神请忽略。
入门阶段
预备知识
1、掌握基本HTML、JS、CSS语法;熟悉 Bootstrap。
参考:
验收最低标准:模仿写出jd.com或者vip.com首页第一屏内容。
2、熟悉Linux命令行
熟悉常用发行版系统(CentOS、Ubuntu)安装 熟悉常用命令行操作,包括文件管理、用户管理、权限管理、防火墙管理等 熟悉VIM使用验收最低标准:掌握lnmp环境搭建。
PHP基础
掌握PHP基础语法、文件上传、cookie、Session、JSON。
掌握MySQL数据库连接:pdo使用。 掌握redis连接及简单应用。 掌握命名空间。 掌握面向对象编程思想。参考:
学习框架
学会使用ThinkPHP框架。主要是该框架在国内使用普及率太高了。不建议使用Laravel入门,因为该框架使用了较多的语法糖、第三方库,对新手可能有难度。
验收最低标准:可以使用ThinkPHP最新版作为入手框架,写出一个简单的博客。页面简单写就行。数据之间使用TP的 display 渲染到页面。
学习写接口
学会 Charles 抓包,看豆瓣的接口返回的数据。
学会写接口(GET、POST)的就行。 学会使用 POSTMAN。验收标最低准:把上面的博客项目改成前后端分离的,先写完接口(最好有文档),再在页面里使用ajax调用接口数据。
至此,你已经入门了。如果需要继续往下,还要学习。
第二阶段
PHP
使用 composer 安装PHP第三方库
对于PHP断点调试非常熟悉 学习常用PHP扩展 使用 SPL 掌握 PSR 规范 掌握反射的使用 掌握设计模式 熟练使用常用框架。 了解php和php-fpm的大部分配置选项和含义。 熟悉HTTP协议。 熟悉正则表达式。MYSQL
熟悉MYSQL优化的一些技巧,例如MySQL的性能追查,包括slow_log/explain等;对于order by、limit、like等一些坑能避开;能够熟练使用常用的索引;对于表结构创建选用哪种数据类型做到胸有成竹等等。
熟悉常用的配置,知道如何调优。 熟练配置主从。NOSQL
掌握Redis使用:对于常用数据结构的经典使用场景非常熟悉;了解Redis的事务、RDB、AOF等机制。
掌握memcache的使用,知道与redis的区别。 了解一下MongoDB。Linux
熟悉常用文本命令:例如wc、awk、split、diff、grep、sed等。
熟悉sort、uniq的使用。 熟练掌握ps、netstat、top等命令使用。 熟练使用Supervisor。 熟悉如何编写shell脚本。 能够理解Nginx的配置的含义。第三阶段
PHP
该阶段PHP已经非常熟悉了,拥有快速开发项目、快速解决BUG的能力。代码遵循psr规范、稳定性很高。
熟悉消息队列使用,在很多场景合适的选择消息队列进行异步解耦。 熟悉如何使用 Elasticsearch 代替MYSQL的全文搜索功能。 熟悉多进程编程。 熟悉socket编程,对于网络IO模型有一定的认知,熟悉多路复用(select/poll/epoll)技术。 熟悉swoole框架,能应用于项目上。 不限制于框架本身,任何框架一天内快速入手。 对php的工作机制熟悉,熟悉php-fpm生命周期。 能够知道PHP相对于c等强类型语言性能为什么会慢。 对于PHP内部的实现原理有一定的认知,例如变量的实现、zend引擎的了解。 对于PHP的扩展有一定的认知,可以编写简单的扩展。MYSQL
熟悉大批量的数据导入导出。对于线上大表操作可能带来的风险有预知。
熟悉分库分表。 对主从延迟能有效解决。 对于MySQL内置的一些函数能够熟练使用,熟悉触发器、存储过程的使用。 熟悉服务器核心性能优化选项 innodb_log_buffer_size、back_log、table_open_cache、thread_cache_size、innodb_lock_wait_timeout等。 对于MySQL内部索引的实现、事务隔离机制有一定的认知。NoSQL
redis常用5中数据类型之外的数据结构也要能掌握一些。如bitmap、GEO、HyperLogLog、pub/sub等。
redis里的事务、管道、分布式锁能熟练使用。 对于redis的服务端结构能有一定认知。 熟悉redis里如何使用Lua。 尝试阅读redis源码。Linux
对于nginx非常熟悉,能够熟练配置https、负载均衡、反向代理;能够使用 lua-nginx-module。
对awk/sed 等应用已经如火纯青,能够随意操作控制处理文本统计分析各种复杂格式的数据。 对于tcpdump、gdb、ltrace、strace、lsof等熟练使用。其它
熟悉Linux应用编程:熟悉makefile使用;熟悉进程、信号、I/O知识;对于C语言有一定的了解。
熟练elk。 对于其它语言(例如java、c、golang)、其它领域(大数据)有一定的认知。 熟悉RPC、微服务架构。 能够支持对于千万级流量网站的正常开发维护工作。结束语
技术无止境,未来有更多可能。
如果想快速提升Redis、MySQL等技能到第三阶段,请看下文。
本文首发于公众号"飞鸿影的博客(fhyblog)",欢迎关注。博客地址:。