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的东西。你要用豁达的心态去涉猎那些遇到的,不要挑肥拣瘦、挑三拣四,嫌弃这个嫌弃那个,然而整天又在埋怨....

只要坚持下去,解决一个个新的为什么,你的瓶颈会有过去的那一天,那时候你就是真正的学有所成了,一个融会贯通而具有综合解决问题能力的大牛。

怎么解决深入学习PHP的瓶颈?的更多相关文章

  1. 怎么解决深入学习PHP的瓶颈

    PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜.所谓"鸡肋,食之无味弃之可惜"的感觉很是贴切. 经常会有这种感觉:不学,看似 ...

  2. 【转】解决深入学习PHP的瓶颈?

    转自:https://www.cnblogs.com/aksir/p/6774115.html PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜. ...

  3. PDA固定资产条码管理系统软件-解决固定资产实物清查的瓶颈问题,大大提高清查效率

    固定资产管理系统是企业信息化管理中的一个重要组成部分,固定资产具有价值高,使用周期长.使用地点分散.管理难度大等特点.一个企业的良性发展,避免不了的要涉及到企业资产的有效管理.对于那些技术装备密集型的 ...

  4. 20151224今天发现到的两篇关于CSS架构、可复用可维护CSS和CSS学习提升能有改变思想观念意识的文章 分别是CSS架构目标和说说CSS学习中的瓶颈

    多讲一个,CSS全称是什么?CSS全称为Cascading Style Sheets,中文翻译为“层叠样式表”,简称CSS样式表又被我们称为CSS样式,CSS样式又被作为一种能制作出各种样式网页的技术 ...

  5. 学习CSS的瓶颈

    何为学习瓶颈 学习到了一定的阶段,就很难继续提高水平的一种现象 这是很多人都正面对的,但同时自己并未意识到. 既然是瓶颈,那么一旦突破了,就是广阔天空! 你是否经常面对这样的情景: 遇到一个奇葩问题, ...

  6. 说说CSS学习中的瓶颈

    虽已数年,但未就学习专门写过文章,这回破处了.苍蝇不叮没有缝隙的鸡蛋,领导不做没有跟拍的表演,同样,想到写CSS学习的文章也是有原因的(虽然我的不少行为没有原因). 情景再现(尊重隐私,下面故事中人名 ...

  7. CSS学习中的瓶颈期深入分析

    虽已数年,但未就学习专门写过文章,这回破处了.苍蝇不叮没有缝隙的鸡蛋,领导不做没有跟拍的表演,同样,想到写CSS学习的文章也是有原因的(虽然我的不少行为没有原因). 情景再现(尊重隐私,下面故事中人名 ...

  8. 算警示吧——此文来自张鑫旭(说说CSS学习中的瓶颈)

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=2523 虽已数年,但未 ...

  9. 科班学习java遇到瓶颈,每天云里雾里怎么办?

    声明:这个问题困扰了我好久,今天在知乎找到了答案.知乎链接https://www.zhihu.com/question/24240982,感谢大神@Tony He的回答. 作者:Tony He链接:h ...

随机推荐

  1. maven配置编译器的版本

    发现每次启动idea时,项目里很多红色错误,都是的编译器版本不对,每次都要手动修改. 其实在pom里把默认编译器版本加进去就好了. <build> <plugins> < ...

  2. XAMl使用其他命名空间中的类型及加载和编译

    以前我们讲过XAMl命名空间.为了使便宜钱知道XAMl文档中元素对应的.NET类型,需要知道XAMl明档中指定特定的两个命名空间.XAML是一种实例化.NET对象的通用方法 ,除了可以实例化一些标准的 ...

  3. JS大写转小写小写转大写,JS字符串大小写互换

    Array.prototype.map.call(str,a=>a.toUpperCase(a)==a?a.toLowerCase():a.toUpperCase()).join(''); 效果 ...

  4. [android] 练习PopupWindow实现对话框

    练习使用Dialog实习对话框 package com.example.tsh; import android.app.Activity; import android.app.Dialog; imp ...

  5. Oracle OCI操作UDT相关学习(二)

    沿用 Oracle OCI操作UDT相关学习 一文中定义的类型和表. 1.更改数据 在sqldeveloper 中更新数据, update dxl.cust set addr.street='a11' ...

  6. 一个最简单的LRUCache实现 (JAVA)

    流程图: 1. 代码 import java.util.ArrayList; public class LRUCache { private int cacheMaxSize = 0; private ...

  7. [模拟回调] demo1模拟用字符串调用js函数 demo2模拟springmvc controller回调页面js函数

    demo1. 模拟用字符串调用js 函数 function dataQuery() { var strFun = "testCallBack"; var strParam = &q ...

  8. POI 2000 ------Stripes

    Stripes Time Limit:1000MS Memory Limit:30000KBTotal Submit:94 Accepted:43 Description Stripes is a t ...

  9. log4j的简单使用

    引入jar包org.apache.log4j.Logger,项目src目录下建立一个log4j.properties配置文件 log4j.rootLogger=INFO,A1,R log4j.appe ...

  10. java多线程之ReentrantLock

    前言 相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么 ...