怎么解决深入学习PHP的瓶颈
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
转载于:https://www.cnblogs.com/qixidi/p/10414720.html
怎么解决深入学习PHP的瓶颈相关推荐
- 怎么解决深入学习PHP的瓶颈?
PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜.所谓"鸡肋,食之无味弃之可惜"的感觉很是贴切. 经常会有这种感觉:不学,看似 ...
- 深度学习已至“瓶颈”?英特尔:数据处理是一剂良药
[导读]霍金弟子Alan Yuille在前不久发表言论称,至少在计算机视觉领域,深度学习的瓶颈已至.然而,人工智能与大数据的发展相辅相成,数据将会推动人工智能的发展,促进更多技术应用落地,将人工智能带 ...
- 张鑫旭:说说CSS学习中的瓶颈(个人觉得对突破技术瓶颈都有思想上的指导作用)...
2019独角兽企业重金招聘Python工程师标准>>> 关于作者 张鑫旭,09年华中科技大学毕业,现上海,就职于阅文集团,专注web前端偏前领域,钓鱼爱好者. 本文转载自说说CSS学 ...
- 说说CSS学习中的瓶颈【转】
一.何为瓶颈? "瓶颈"指瓶子的颈部,相对狭窄.这是很传神的一个词,因为狭窄,因此难以突破:但是,一旦突破了,就是广阔天空(偌大瓶身)! 小弟不才,凑合画了个瓶颈示意图,如下: 图 ...
- 多目标机器学习_NIPS2018 - 用多目标优化解决多任务学习
题外话: 多任务学习可以说是机器学习的终极目标之一, 就像物理学家在追求统一所有力一样, 个人认为机器学习也在追求一个模型解决几乎所有问题. 虽然我们现在还离这个目标很远, 但是多任务学习在实际应用中 ...
- java语言就业方向_四大就业方向彻底解决你学习Java语言编程的后顾之忧-生活感悟与随笔
-亦是美网络...
前面的文章中已经给大家介绍了关于Java编程语言的优势.特点以及就业前景等内容,大家之所以这么热衷于Java编程学习,不仅是因为Java是编程市场上最为广泛流行的语言,大家更关心的是学习了Java编程 ...
- Deep Learning and the Information Bottleneck Principle 深度学习与信息瓶颈原理
Deep Learning and the Information Bottleneck Principle 深度学习与信息瓶颈原理 摘要 从信息瓶颈(IB)原理的理论框架出发,对深度神经网络(DNN ...
- ICLR 2022 | Facebook AI提出解决表示学习坍塌问题新方法
Facebook AI团队在ICLR 2022发表了一篇文章,针对表示学习中的坍塌问题,提出了VICREG方法,通过variance.invariance.covariance三种loss的结合约束自 ...
- 深度学习 Day 3——解决深度学习环境配置问题
深度学习 Day 3--解决深度学习环境配置问题 文章目录 深度学习 Day 3--解决深度学习环境配置问题 一.前言 二.问题:环境配置 三.解决问题 1.确定显卡驱动 2.安装 3.测试 4.不使 ...
最新文章
- 如何选择合适的监视器?
- 一、策略模式(Strategy Pattern)
- 组件通信-父组件为子组件传递数据-静态数据//动态数据 // 数据校验
- Chromium 内核新款 Edge 浏览器对比评测,微软找回面子全靠它了
- ArcGIS 查看运行结果
- 阿里java高级面试题
- 计算机室和电子备课室管理制度,电子备课室
- 微计算机原理及应用大纲,《微型计算机原理及应用》考试大纲
- Linux命令面试突击
- 关于web中的字体, .woff, .eot, .svg
- 计算机硬件设备税率,软件产品增值税即征即退税额的计算
- UG NX 12抽取复合曲线
- 商业逻辑12讲之领导力的逻辑
- 微信开发工具 git代码管理
- js多重循环遍历渲染
- java poi word bookmarks_poi根据word/excel模板(书签)创建导出word/excel文档
- 瑞萨e2studio(6)----编译调试
- spring启动流程(一):启动流程概览
- Vivado HLS(High-level Synthesis)笔记一:HLS基本流程
- 关于学习的时间定律-21小时、1000小时、5000小时、10000小时
热门文章
- Ajax的简单实现(JQuary)
- 创建自己的Vagrant box
- background-attachment:fixed应用
- Oracle数据库升级与补丁
- linux 基础 文件系统 用户权限
- matpython_[mcj]使用Matlab/Python合并mat文件并存为mat
- 强制生成32位arm程序_3. 从0开始学ARM-ARM模式、寄存器、流水线
- php里面的耗时操作,PHP执行时间那点事
- nodejs源码_格物致知记一次nodejs源码分析的经历
- mysql 数据库的基本管理