php学习过程

做者:沈杰
连接:https://www.zhihu.com/question/27170424/answer/82034587
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

由于这是面试中会问到的一个问题,虽然它看起来很简单。javascript

回答作网站的,也就是个简单建站的水平。php

回答作网站后端开发的,对PHP有了必定的认识。css

回答作后端处理的,有了更深层次的认识。html


学习同样技能,你得先清楚这项技能是到底作什么的,说到这里,我想你们都会简单的说是作网站的,由于PHP在WEB领域应用最为普遍,大多数网站都是用PHP作的。准确的说PHP是作网站的后端开发的,其实我这样说还不算正确,PHP只是作后端开发的,但不仅是网站而已。就像如今比较火的APP开发也能够用PHP作后端处理。前端


PHP相对于其余语言,比较简单,相对好上手,比较适合零基础的人学习,可是就像我上面说的那样,PHP只完成了一个网站或者系统的一部分。java


一个运行的网站或者软件系统能够分为前端页面,后端程序,数据库,linux。而处理后端的PHP仅仅是只占了四分之一,PHP自己的东西其实并很少,真正多的东西都在PHP以外,因此单纯的掌握PHP并不足已作出什么产品,可能连工做都找不到。mysql


关于学习PHP,我想讲讲个人心路历程:


前端:

但凡是一个网站都必须得让人能看得见,使用得起来。任何一个网站能够没有数据库,能够没有后端程序,可是必须得有前端页面,而这也是最先期的网站形态—一 一个只能展现文字和图片等信息的静态页面。jquery


掌握静态网页的制做技术是学习开发网站的先决条件。这里面的学习包括 HTML,css,javascript,它们能够直接使用浏览器运行。linux


HTML负责网页的结构,用它来规定网页排版中哪部分是文字,哪部分能够放图片,音频文件,视频文件放在网页中什么位置显示等。程序员


CSS能够把这些文字,图片,视频等信息拥有必定的合理好看的样式,能够定义文字的大小,颜色,图片的大小等等。


javascript可让网页与人产生交互,就像你登陆网站,点击登陆按钮就会跳转,把鼠标放到菜单,菜单就会自动展现下拉,逛淘宝时,把鼠标放在产品图片上,图片就会放大等等。


个人学习技巧和心得:

我算是零基础学习开发的吧,连大学都没上,没系统的学过计算机专业,初次开始学习html时,我是以w3c手册为学习教材,可是越日后看越以为里面写的东西琐碎繁多,手册里介绍了不少标签,标签又有不少属性,它们各自又表明的什么含义。

就像下面的这个表示表格的一些标签,这是手册给出的概念,看了以后彷佛也明白又不太明白,看完又没记住,回想起来,仍是一头雾水,像是什么也没学到。



那时我开始心急了,我没法想象我竟然连基础的东西都都学不会,思量了一两天,我以为我仍是太浮躁了,我决定从新开始,动手敲敲试试,之前只是光看。就这样开始后,仿照别人家写的,运行一下看看浏览器显示的是什么效果,去掉某个属性以后看看是什么反应。我就这样笨拙的进行着,把每个标签,每个属性都敲了一遍,一个个的看到效果以后,我才理解手册里描述的概念是怎么回事了。


前端的知识比较锁碎,没有太多逻辑性可言。其中html和css的任何元素标记都要亲自动手实践,大部分新手之因此以为难学,看不懂手册概念,主要是学习方法不对,“懒”是首要缘由,由于不动手实践,光看概念是没什么用的。

因此克服掉懒的习惯,动起手来写一个HTML标记,运行以后看看效果吧,这样你才能真正掌握住。


不过,我建议初学的同窗仍是先看视频为好,由于操做效果都能看的到,手册这东西做为工具使用。


关于html和css中的标签和属性你不必彻底一个不差的记住,由于这没有太大的意义,等你作了一个小项目以后,你只须要记住经常使用的就行,其余的作到有印象,用的时候能想到,而后查手册便可。


当你学完以后必定要作一个简单的小项目,你学习时针对的都是散乱的知识点,最后要把这些东西总体的用一遍。

如下这个图就是我上一年学习html最后本身动手作的一个小页面:





严肃说来,HTML是否被认为是“真正”的编程语言并不重要——它依然是一种须要学习的新技能。尝试新的东西是很是可怕的。你须要在处于这种未知的弱势地位时也勇于一往无前,不要急头急脑一会儿就想把东西学会,要沉得住气,踏踏实实的心态一点一点的来,并且失败和不肯定也没有关系—— 事实上,它们都是成功的重要组成部分。




再说下js

在上面我已经阐述过了javascript,(简称js),可是在这里为何还要再强调js呢?

由于不少人都说不用学js了,直接学jquery(简称jq)就行。jq是什么,jq是一种js的框架,它可使开发速度更快,有不少作好的功能和特效,直接使用就好了。

但我并不一样意光学jq,若是你想让本身能解决更复杂的问题,变得更有竞争力,或者只仅仅能更好的学习理解使用jq。那么请学习js!

上面说了jq是js的一种框架,它的本质仍是js写的。js能完成的,理论上来讲jq也能完成,可是并非100%都能处理,并且jquery能作的,js 100%能完成。jquery只是工具简化操做,底层仍是js。只有在学好原生js的基础上,才能更好的学习jquery或其它框架和处理前端问题。


后端:

到这里才说到咱们的PHP。若是说HTML和css是看得见的部分,那么PHP就是看不见的部分。它负责在后面处理数据,而后返回给用户。

当网站由开始的静态页面发展到如今有了后端程序,那么网站才有了业务逻辑。简单的说,就像一台计算器,你在前端输入数据,而后点击提交,PHP给你处理运算,而后返回到前端,这时你就看到告终果。须要特别说明的是PHP并不能直接在浏览器中运行,它须要Apache环境支持,放在Apache服务器里面,而后用浏览器用访问,这个须要你们在学习过程当中配置一下,很是简单。


个人学习技巧和心得

学习PHP我推荐韩顺平老师的《PHP从入门到精通》的视频教程,作PHP开发,包括有了解的同窗可能都知道韩顺平老师,名气很大,它的这个教程几乎是每一个PHP学子必看的精品教程。网上有不少这个教程的下载。其实韩老师不仅是出了这一个教程,你们能够顺便搜一下每学网,每学网上有更多韩老师亲自作的其余教程。


我学习PHP时,慢慢的随着讲解的知识不断增多,不懂的问题也开始出现,刚开始时我就简单用脑子记着,想之后再解决。可是后来再回想,发现有一些居然记不起来了,慢慢的,不懂的问题越积越多,我惧怕遗忘掉我不想遗漏任何我没学会的地方,哪怕是一个暂时没细想,细想一下就能懂的简单问题。若是忘掉了,可能之后再也想不起来了,这对我来讲是个很难弥补的损失,我是个完美主义者。


我想起了学习html时的教训,仍是不能懒!我创建了一个文本,专门记载我不懂的,难以理解的,还有暂时没有解决的种种问题,甚至是灵机一动偶然想到的问题,也都通通不拉的记下来。

当我学完PHP后,再回头看,数一数大概百十条,这个文本我依然保留着:


我但愿你们在学习的过程当中也能养成写记问题的习惯,好记性不如烂笔头么,由于学习过程当中不免会碰到不少不懂的问题,可是你又不能一直等着这个问题解决,你须要继续前进,而时间久了,你可能就会遗忘掉。


每学到一个脚本难点的时候,尝试对别人讲一遍,你能讲清楚才说明你真的理解了。

除了记问题,我还把老师讲的知识,用本身的话按本身的理解本身的话写下来,这就如同是跟别人讲一遍似得。记住,要用本身的话本身的思路写,忘记老师的原话,这样别人的知识才会转化成你的。

因此,这是我当时写的笔记:



写到这里,你们不要以为我太麻烦,这样太慢,记住,思考要慢,慢的为了之后更快!

合理的“慢”,不是速度上的缺失,而恰是对“过快”的反思与矫正。慢是一种方法。尊重规律,沉下心来,追求质量,作起事来,严格有序,精益求精。


实践也是强化知识理解的过程

千万不要只看教程和学知识点,最重要的是实践,大多数人包括我,曾都是跟别人学起来像是学会了,到了本身作的时候却很难进行下去。

当你看完教程掌握了里面所述的内容后,能够按照老师讲的例子或者本身构思某个应用场景,而后从头写起。你会发现不少问题,也会加深对教程知识的理解。这样经过不断地练习和获取反馈,你的开发功底会很快提高。



MySQL数据库

当网站技术再日后发展时,人们须要网站处理存放更多的数据,来知足现实生活中的业务逻辑,这时候就须要数据库了。

数据库是什么,按字面的意思,数据库说白就是存放数据的地方,它能够是一段文字,一张图片或者一个文件的URL地址等等。好比,当你想浏览一篇文章时,你点击文章标题,这个请求会跳转到PHP文件那里,PHP再从数据库取出你想看的那篇文章。

PHP和数据库是密不可分的,PHP后来在网站开发中更多的任务就变成了操纵数据库了。数据库有不少种,准确的说咱的这个数据库是mysql数据库,只是由于php和mysql关系很是好,它们两个是完美的搭配。因此咱们学习PHP开发学习的数据库就是MySQL数据库。


个人学习技巧和心得

学习mysql时,我一样采用了学习PHP时的学习方法:记问题,写笔记。

仍是想在强调一遍:要用本身的话写,忘记老师的原话,这样别人的知识才会转化成你的。


一样,这也是当时我作的:


该经过作一个小项目强化一下了。好比去作一个文章或者商品管理系统,作作经常使用的增删改查。就像下面的添加这个商品功能页面,无非就是用PHP把前端用户填写的数据存放到数据库。



编程只会在最初的几天里是个有意思的事情,以后大多会出现厌烦厌学。因此兴趣并不能彻底成为编程的动力。经过项目开发,你会发现更多的编程动力是生活中须要的实际需求和经过高强度高密度的学习和思考后解决需求后的强烈成就感。



框架:

框架说白了就是一个已经帮你完成了部分功能的程序部件结构。

基本上到了公司动手作起真实的项目中都是使用框架来开发的,它可使你的开发速度更快。

为何?就说网站开发吧,好比你要作网站中的验证码功能,你须要动手本身从0开始写,一样的,写一个文件上传程序,你须要动手从0开始写。


这时你会问,我作什么不都是要动手写的吗?


可是你忽略了一个问题,验证码,上传文件等等这些都是网站中几乎不可缺乏的基本功能,每一个网站都要用到,这时候你能够动手把这些经常使用的功能写好,而后封装起来,用的时候直接调用就好了,大大减小了代码的重复性,而这其实也就是框架了。


先别说本身作一个框架,由于完成一个好的框架不是一项简单轻松的工做,并且更须要高的知识技术水平。因此咱们要学习使用别人作好的专业的框架,大都说中小型公司都是使用的别人的框架,PHP常见的有thinkphp, ci, yii,我我的推荐学thinkphp,这个是国人作的,轻量级,学起来更容易些,使用的公司也比较多。


MySQL优化技术:

当你学会了PHP,mysql的一些增删改查技术后,你能够尝试作一个简单的文章管理系统了,能发布,修改,和查看文章。

可是,你试想一下,会不会遇到这样一个问题:当你查看一篇文章,MySQL须要从文章表中寻找你须要的那一篇取出来,此时你的文章已经不少了,好比有一百万篇,或者一千万篇时,mysql再从里面找一篇文章是否是愈来愈耗时了,日常文章量少的时候也许1秒钟就能打开一篇文章,此时可能须要十来秒,你愿意等吗?用户愿意等吗?就像新浪网,腾讯网这样的大型新闻网站,若是用户看一篇新闻须要等很长时间,那能行吗?


因此咱们要对mysql进行优化,让数据库尽可能用更少的时间找到咱们须要的东西。


在这里就不讨论具体的技术细节了,

优化手段主要包括:

1,表的设计 (能够减小数据的冗余,节省磁盘的开销)

2,mysql的索引优化 (利用索引,能够加快查询数据的速度)

3,mysql的查询优化。 (加快查询的速度)

4,分区分表 (把一个大表分红几个小表,提升查询的速度)




页面静态化技术:

当你学会了MySQL优化技术,切不要沾沾自喜,新的问题的依然不少。

能够再试想一下:一我的访问时,和大量的人访问时?当你一我的访问也许很快,可是大量的人访问,mysql要处理大量的请求,它是忙不过来的,mysql支持的请求数是有限的,这很容易理解吧。


假如它一次只能处理100个请求,当超过100我的时,其余的用户是否是就要等着,这样速度又降下来了,如同上面举的新浪和腾讯网的例子,用户是等不了的。


怎么办?一个很好的解决方案是采用静态化技术。

为何要采用静态化,就是把数据库的数据生成一个文件,用户第一次访问时,mysql依然从数据库里面取,当第二次乃至之后更屡次的访问时就直接访问这个静态文件了,再也不劳烦数据库了,这样就减轻了服务器的压力了。



Linux

咱们的程序,数据库,整个网站终归都是放在linux系统的服务器上的,对于通常的程序员能作到基本的配置便可。基本命令、操做、启动、基本服务配置(包括rpm安装文件,各类服务配置等);会写简单的shell脚本和awk/sed 脚本命令等通常公司有相应的运维人员管理。若是对这个有兴趣,后期能够继续深挖。



非关系型数据库Redis/Memcached

怎么又是数据库?,不是已经讲过了mysql了?是的,上面我们说的mysql是关系型数据库,因此这两个叫作非关系型数据库。


为何须要它们?


与mysql不一样的是Redis和Memcached 的数据是放在内存中的,mysql是放在磁盘中的,而访问内存中的数据速度要远大于放在磁盘中,这就是它们的好处。


那为何还要学习MySQL,干吗不直接学习使用Redis和Memcached?


由于:MySQL更适合海量存储数据,Redis和Memcached是在内存中的,须要很大的内存才行,并且放在内存中的数据也容易丢失,若是机器故障重启内存就释放了。


通常互联网公司大都采用MySQL + Redis,或者 MySQL +Memcached的方式进行架构;Redis/Memcached都是基于内存的,因此它们的速度很是快,包括读和写都很快,通常用在一些高并发,大数据量访问的场景之下。




说到最后,总之,学习PHP并不难,难的是一个体系。我写的整体比较基础,主要是针对一些刚入门学习的同窗,在总体上给创建一个完整的知识体系。


**************************************************************************************************

在这条路上,可能尽管你如此努力,可仍是会遇到你难以理解的问题。一样,我本身曾经连续半个月失眠,为了考虑解决那些棘手的问题。


我想让你知道的是:

要想确切地掌握编程语言的每个特质是不可能的——它们是野性难驯的猛兽,若是你认为编程是一种易于学习的简单技能,那可能就会南辕北辙。做为一个程序员,须要学习的东西是无限的,而且一种不能知足的持久遗憾感,即便是该领域的专家也时常会有。


不用担忧,知道了这些,把心态放正,一步一步的来,不要试图一会儿掌握全部内容,设定那种如 “我要学习如何编写代码”这种不明确的目标——目标应该更具体,并将任务分解成更小的任务。不要放弃,吸收知识是擅长它的第一步骤,必定要给本身信心,尝试用更多的方式去考虑一个问题。



俗话说得好:不管你认为本身能作到,仍是认为本身作不到…..就要看你怎么暗示本身了,这是我常常的借口:

我之因此不明白这一点,是由于我有一个创造性的大脑。而编程是逻辑性的,个人大脑只是不习惯这种思惟方式!



在整个学习过程当中,我但愿你们:

不要相信任何‘神话’,学会本身思考。

不要墨守成规,大部分人知道的事情可能都是错的。

不要相信网上的传言,勇于提出质疑,去测试,根据实践作决定

相关文章
相关标签/搜索