[转]
转,原文:https://www.cnblogs.com/qixidi/p/10414720.html
------------------
PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜。所谓“鸡肋,食之无味弃之可惜”的感觉很是贴切。
经常会有这种感觉:不学,看似也不后退;学了,好像也没什么进步;if...else,循环这些你也都知道,甚至还能记住一些别人不大会的函数,但是一到项目来了,就头大。纵然口中千语万言,但其实心中实无一策。遇到什么问题都一片迷茫,提心吊胆,无从下手......
此时,首先恭喜你已经入行了,其次恭喜你遇到了深入学习PHP的瓶颈。
不过一旦通过这个关卡,你的认识水平将会更上一层楼。但这个关卡并不容易通过。因为,阻碍你的不是PHP的东西,而是很多非PHP的东西......
要怎么解决这个瓶颈?怎么才能深入学习PHP?
1:深入理解编程思想
PHP开发项目涉及到的编程思想有:面向过程编程实现,面向对象编程实现,面向切面编程思想;
不只是熟悉,而是要精通;
PHP一开始是变量,分支语句,循环语句,然后就是函数了,所以这是一开始就会遇到的编程思想:面向过程编程思想。它是以函数为单位,把引起重复的代码都封装成函数的一种处理思想。可以用这种思想直接去开发项目,也是可以开发出来的。但是你会遇到很多很多重复的代码,你会造很多很多文件,所以只用面向过程编程思想去开发项目,最大的特点就是:项目中的文件数量太多......文件太多会造成文件夹的分布难易把控,也不利于项目的维护和升级,难以做大项目,通常做个企业站差不多。
你应该减少文件数量,那么就需要新思想了:面向对象编程思想。它的主要特点就是:封装、抽象、继承、多态、接口。
不要死记硬背这些,要充分的用现实道理去理解它,起码要能说服自己。比如:就问你,为什么要有继承,为什么要有多态?他们是基于什么原因而产生的?他们的长相为什么是那样子?
这是重点,也是难点。难就难在,你好像都看过了,而且还看过很多的书籍,但是用的时候好像就搭不着边。因为你没有吃透它。这起码会阻碍你对PHP的框架的深入认识,比如很多人用TP开发项目,用Laravel开发项目,但是你是否深入研究了TP的源码?Laravel的源码?Composer是什么东西?为什么要这样?
此时你应该是“把薄书读厚”的阶段,你要充分的去寻找这些问题的答案,多问一下为什么,然后去找答案,在寻找答案的过程中,你不知不觉的就提升了水平......
用面向对象思想去开发项目,可以大量的减少文件的数量,让你的项目很紧凑,精简,但是功能又强大,扩展性好。不过当你的项目越来越大的时候,你会发现还是有很多重复的代码,他们体现在文件和文件之间有不可避免的重复,这不是面向对象的缺陷,而是项目本身的问题,面向对象只是没有强大到能解决这些而已(面向过程就更不行了)。此时你要升级你的新思想了:面向切面编程思想。可能这种思想你感觉到很模糊。但我如果说“套模板里的获取数据的标签”,你应该就清楚了吧。
形如:
5" order="id asc" limit="10">
《{$title}》---{$author}
{$add_time}
这是在套模板的时候经常要使用到的获取动态数据的方式。但你能解释为什么要这样做吗?以及为什么它长成这个样子?
其实能回答这些问题,你就已经进入了面向切面编程思想的领域,因为你要深刻去理解模板解析引擎......它就是为解决大项目而带来的但是面向对象还不能解决的代码冗余问题。这样才能让你的项目越来越大......
2:MVC,单入口,正则表达式等
MVC不是记住这几个单词,是要深刻理解它。理解为什么要有控制器,Model,View,以及它们各自的内容应该是什么...
正则表达式也是需要很熟练的。
3:数据库的深入
对于数据库的分库、分表、分区、数据库集群要开始学习了。
数据库优化,比如:索引优化,SQL语句的优化等。
4:各种缓存的处理
如:文件缓存,数据库缓存,内存缓存等。
这些就会牵涉到很多东西,如:配置文件的写法和操作,数据库缓存表,缓存字段等。NoSQL的引入,如:Memcache,Redis,Mongodb,....
5:服务器
主要是Linux服务器,它上面的内容就多了,最先带出来的就有Apache,Nginx等web监控程序。
还有ssh,ftp,等常用程序。
深入一点还有shell编程,以及用shell编程去开发一个服务器管理系统,如:AMP,WDCP,....这些东西看似做PHP工作的你无关,但是如果你的网站访问不了,你知道是什么地方有问题了吗?所以不是无关,而是很有关,所以不要再保留那种局限的狭隘意识了。
6:负载均衡、网站抗压等
这些是做一个有发展潜力的项目的必须的内容,你了解了多少?和PHP有关。
7:深入学习数据结构
相信大一的时候你学数据结构,里面讲些指针,链表,队列,堆栈什么的,你会听的云里雾里,而且你也不怎么用的到。但是这个阶段你可以深入来学习了,它会有助于理解比如Apache的原理,当然就可以让你更容易和轻松使用Apache了。这其实就在无形的帮你解决瓶颈问题。
8:需要学习底层语言
主要是:C语言,C++;可见C语言和C++是非常重要的基础语言。PHP解释器是由C/C++写出来的,浏览器也是由它们写出来的,这当然就和你的PHP应用联系起来了。
9:加强应用层面的学习
如:微信开发,各种第3方插件的使用,如:jquery,Layer,bootstrap,Uploadify。甚至自己动手写需要的插件。
不要只限制PHP,而要开始动手弄前端了,因为前端的东西可以让你更深入理解PHP。比如:网站首页的文章提取,如果数字是1,2,3,4,5这些,你可以从前端解决,也可以从PHP那边解决...如果要求更变态的信息展示呢?很可能就适合在PHP那边解决甚至在数据库那边解决......
扩展你的认识会帮你深入学习PHP......
总之,当你学习PHP有一定的基础了,你就不会再轻而易举的说PHP很容易,很简单,两个星期学会之类的幼稚的话了。你甚至会感觉到自己越来越渺小,还需要学很多很多东西,这样还好,至少你真的是入这一行了,但越来越会遇到深入学习PHP的瓶颈了。阻碍你前进的步伐的东西是那些很多非PHP的东西。你要用豁达的心态去涉猎那些遇到的,不要挑肥拣瘦、挑三拣四,嫌弃这个嫌弃那个,然而整天又在埋怨....
只要坚持下去,解决一个个新的为什么,你的瓶颈会有过去的那一天,那时候你就是真正的学有所成了,一个融会贯通而具有综合解决问题能力的大牛。
原文地址:https://www.jianshu.com/p/5002143767da