自学php,重点是耐心。php相比较于其它语言,还是比较好入门的,但是中期会比较困难,因为一些历史原因和php过于灵活的特性,同一个问题会有很多不同的解决方法,有的解决方法已经过时,有的解决方法很不实用,这些对于新手来说很难分辨。
开始要学习的就是php的基础。首先你要搭建好一个wamp或lnmp的运行环境,这些通过搜索引擎都能得到很多资料,按着步骤一点点搭建就可以。
开始的时候不要学什么html,css,js,这些是前端开发要掌握的,对于一个后端开发来说,这些不是开始时就要学的。因为现在都是前后端分离的架构,php不再需要套模板,后端都是通过接口直接返回数据,smarty也不要学了,这是上个时代的东西了。你只需要学习好php的语法基础,尤其是最新版本php7的新语法。
(1)数组是php的重点,也是日常开发中使用最多的,常用的数组函数一定要了解,没有必要死记硬背,用的多了就记住了,但是起码要都了解。
(2)oop是现代开发的核心,先学习php对于oop支持的语法和关键字,class,abstract,interface,属性和方法的可见性,trait,静态等等,这些都掌握后,你可以学习一下设计模式,算是对oop的一种应用,工程模式,单例模式,观察者模式等等,这些在日后的开发都很实用。
(3)学习一些php官方提供的类库和函数,这些都是很实用的。pdo,文件操作,mb函数簇,cookie,session等等,php官网上有很详细的列表。
(4)psr,这是php目前开发的规范,如果你连规范都不知道,还怎么写代码?
(5)composer,这是php的包管理工具,php拥有很强大的生态环境,各个开发者也都在不断努力的完善着这些生态。当你开发一个功能时,你不需要从0开始一行一行的写,而是找一些现成的包来使用,这样你可以把注意力放在业务代码的开发上。比如你要请求其它的接口,可以使用更加成熟的guzzle,而不是通过curl,你需要做单元测试,就可以使用phpunit。包和包之前有时候也会存在依赖关系,当你的项目使用多个第三方包的时候,这些依赖关系的管理就会很麻烦,所以引入了包管理工具,这也是现代语言必备的。
(6)框架,目前php最流行的框架是laravel,目前最新版本是5.8。它提供了很完善的功能给开发者使用,使用了很多设计模式来帮助开发者解除耦合,解除耦合关系对于一个快速迭代的项目来说很重要,尤其是在代码量越来越大的时候。其它的框架,yii,ci,tp也都可以学习一下。
(7)git,这是目前最主流的代码仓库管理工具,也是必须要掌握的。因为当你在公司工作时,是一个团队许多人在维护一份代码,彼此之间提交的代码可能会有冲突,所以需要一个完善的工具去管理代码。可以在github,开源中国这些地方申请免费的仓库,然后自己练习一下提交代码,解决冲突。
你掌握了php的语法,以及它的生态,可以使用框架快速搭建一个web应用了,到这里,就进入了学习的中期,也到了提高期,在这个时期每个人的技术水平上的差异就会提现出来,知识上的学习也不在是垂直方向的,而有更多的横向上的扩展。
(1)linux系统的学习,linux是运行的基本操作系统,作为后端可能要经常登录linux,你需要学习一些它的基本操作命令,mv,cd,ssh,top,ps等等,了解一些操作系统的知识,比如用户态,内核态,epoll,poll,select,文件树,进程,线程。学会怎么去看一台服务器的性能,比如内存的使用情况,磁盘的使用情况,cpu的使用情况等等。这些虽然是运维的一些知识,但对于后端来说也是必须的。
(2)mysql的性能优化,只会单纯的curd,只能算是入门,对于性能上的优化,才是重点。比如索引的知识,事务,事务的四种隔离级别,一个表如何去设计,等等。
(3)nosql的学习,现在的web应用,只靠sql类型的数组库很难支撑,nosql可以带来性能上的提高。redis是目前最常用的nosql,它的各种数据类型一定要了解,string,hash,list,set,sort set,还有了解它们的使用场景。elasticsearch,文档型数据库,使用倒排索引,对于全文搜索的支持非常好,而全文搜索对于mysql来说是一个困难。
(4)linux中的软件,当你掌握了linux系统的一些基本命令后,你还需要学习一些linux中软件的使用,因为单靠一个php是不足以支撑起一个完善的web应用。比如rsync,supervisord,nginx,甚至是mysql,redis,elasticsearch这些工具的安装和配置,还有使用。
(6)php内核的知识,在c语言层面的数据结构,当你了解这些以后,可以更清楚的知道你写的php代码是如何运行的,为什么使用foreach循环数组比for循环数组性能要好,gc机制是怎么回事,php的扩展是如何构建的。
到这个阶段,你应该已经学会自己去寻找知识,实践并消化了,这也是程序员的重点。可以去学习一些其它的语言,开阔一下思路,也可以钻研一下算法和数据结构,这对自己的提高也很有帮助,总之到了这一阶段,选择也是很多的,各种知识和技术学习起来也没有开始那么吃力了。
不管是哪个阶段,重点是多动手,多写代码,多实践。
推荐一个php2020实战教程入门版,比较适合新手,超过10000行的示例代码,逐行讲解,感兴趣的朋友可以私聊我。