- N +

请问有没有自学php的朋友,分享下经验

一篇在知乎上的回答:https://www.zhihu.com/question/391318937
 
很久没做正式的php开发了,我现在做自媒体了,怎么推荐这个问题呢?那我简单说下。
 
我之前的php开发主要是自学的,只要你的自学能力够,动手能力强就没问题,最重要的一点,坚持。
 
自学php前,一定要想明白两件事:自己的动手能力怎么样?程序开发是兴趣还是为混口饭吃?最后解答这两个问题。
 
我最早接触php是在大学,2010年左右接触dedecms,那时候还不知道dedecms是php开发的,只知道能做Web网站,开始尝试着建立自己的个人网站:爱家乡网,当然这个网站现在因为政策原因,一直没开放。
 
有了自己的网站,就开始频繁修改页面样式,前期只限于模板的修改,简单看看官方模板和教程就大概能明白了,标签可以学着调用,也能出来东西,关键是每个html是什么意思,对于零基础的我来说,根本看不明白,是完全不明白,div是什么鬼,听都没听过。
 
于是开始自己写代码,与其说是写,还不如说是Ctrl+C+V,粘了也看不大懂,只能一行一行试,看看每个代码出现是什么意思,那会看到好的效果就收藏,印象中最深的是跑马灯效果,这种效果看起来能让网页酷酷的。
 
那时还不知道div+css以后会比较流行,就一直用Table的方式布局,现在看起来完全像搞笑一样,要知道我在自己试着写代码之前,我只有两年的电脑接触经历,大学以前根本没电脑可以接触。
 
当然除了学校的电脑课,但狼多内少,微机课根本抢不到电脑用,每次只能眼巴巴的看着同学在Win98上点呀点的,看着贼爽,我就是摸不着,顶多在同学不用键盘的时候,伸出多年练就的六脉神指,偷偷按一下,感觉下键盘的魅力,还不敢按到底,万一触发别的事就不好办了。那会的键盘好像是机械键盘,不是我们大多人现在用的这种薄膜键盘,键的行程比较长,小心点按,还是问题不大的。
 
对编程零基础的我,学呀!
 
零基础应对Web第一页:
 
网上找资料,一篇又一篇的看,一遍又一遍的看,经过不知道多少个寒来暑往(两天左右),终于可以下决心自己写代码了,用的工具是当时号称“网页三剑客”的Dreamweaver,Fireworks,Flash三个软件,Web开发老司机肯定、必须、一定用过这三个软件。
 
最开始DW弄网页很原始,就是找个地方,一圈又一圈的套Table,套完了看着不舒服再往左拉拉,不行再往右拉拉,完全没有什么兼容性呀美观性可言。
 
上面就是我的第一个网页的案例:预览地址https://www.linyufan.com/static_web/zuoping/blog/
 
林羽凡php开发
 
DW有个好处就是可以一边拖元素,一边预览,可以拖个Table进去,也可以拖个input进去,都可以。样式什么的,也不懂,让它自己生成就好了。
 
弄完上面的东西,差不多就开始正式进军Dedecms系统了,当然还是和大部分学开发的人一样,搭建集成环境,开始用的APMServ,一直非常稳定,phpstudy,upupw,warmp,bt什么的后来才知道,去年APMServ的团队又开发了一个新的产品:PHPts,集成Nginx,非常轻量,有兴趣可以看看。
 
本地集成环境端口占用问题:
 
搭建集成环境最头疼的就是端口问题了,为此没少费过脑细胞,好在我的脑细胞再生能力比较强,要不早死几火车皮了。最简单的一招:cmd进命令,运行netstat -ano看所有端口,找80后面加|findstr 80,再找到对应的pid,进任务管理器结束它,我这有个简单的教程:https://www.linyufan.com/content-10-1571-1.html
 
大概就是这么个思路。
 
正式进军CMS系统:
 
安装好Dedecms后,最爽的事就是不用太费神的学习html的东西了,因为所有东西都是现成的呀,只需要看呀,改呀,看呀,改呀,看呀,改呀,再看,再改,再看,再改,不要怕搞坏什么,更不要怕麻烦,搞坏重新安装,怕麻烦?那就只能啃口玉米定定神,想想你是要干嘛来着?
 
通过一系列的看呀,改呀,基本差不多就能明白Html的一些东西了,顺便也差不多知道了MVC架构的东西,前后端分离的一套原理,另外,Dedecms的标签自然是明白不少,当然要向高阶进发,还需要知道dedecms的二次开发,即模块开发,这个时候就涉及到php层面的东西了。
 
 
初窥php风貌:
 
要做dedecms的二次开发,就要了解php的一些东西,不然,不可能上手开发的了。然后就去网上找php相关的资料,wc,根本看不懂呀,这和html根本不是一个东西好嘛。
 
没办法,只能硬着头皮上了,看看简单的语法就行了,高阶函数、魔法函数什么的根本看不懂。连个if-else都不会写,懂什么function-class,管它呢,能把东西弄出来就行。
 
注意重点:能把东西弄出来就行。
 
互联网本身的学习成本相对比较低,只要你不是开发前所未有的功能,基本都能找到对应的代码和思路。
 
所以,方法就是:,说好听点就是借鉴。把别人代码弄过来,再修改修改,完成个性化属于你自己的功能。
 
对于dedecms这类成熟的cms,你能想到的一些模块要不官方有了,要不网上也能找到类似的,顶多是加个字段,加个不同的显示样式等等。
 
到此,终于知道php长什么样了,再接着就是学习phpcms 和DZ,当时非常流行的两个框架,前者是cms,前些年官方停止更新了,后者前段时间貌似说要重置,结合小程序和移动互联网设备。
 
 
踏入php开发行业
 
到这里,我的php开发就差不多结束了,因为:
 
我转行做了营销方面的,主要是SEO方面的,这个就不说了,和主题无关。不过题主的内容还可以往下写,因为,我也有过一些php项目开发管理的经验。
 
接下来,就可以进入php的正式开发了,现在用php原生写东西的人/团队应该是不存在的,即便是企业现有成熟的产品,大部分还是有自己的框架系统的。如果没有,请注意一个东西叫:Thinkphp,除此之外,还有很多php的框架,各行各业的都有,电商的,小程序的,百科类的,问答类的,博客类的,都能找到成熟的框架,注意商业版权问题就行了。
 
初学建议使用Thinkphp,后面简称TP,推荐理由就是用的人多,国内的,有问题的话解决方案也非常多,另外像Yii,Laravel,Zend Framework这些框架,一般人还真不好驾驭,要有极强的学习能力。
 
除非做非常大的大型项目,否则Tp完全够用了,如果是国民级流量的站,建议换个语言,再和你的架构师聊聊。
 
进入TP,你就会进一步了解到mvc,class,function这些东西的意义,这个时候,除了基础html,还你需要补充一下sql的知识,说到底就四个字:增、删,改,查,就看怎么组合了,像Tp已经非常成熟的封装了,只需要用你的无名指按下->组合就行。
 
大部分功能基本都封装好了,只需要知道怎么用就行,涉及到底层的一些东西再去查官方开发文档就行,前期用到的机会也不大,慢慢来。
 
开发最重要的
 
后续学习能力,做程序开发要有一直朝前学习的能力,哪怕像php,也一直在更新迭代,现在的php7和之前的版本更是完全不一样,甚至一些方法用法都不一样了。同时有时间再学一些别的语言,像go,Python,会让你的编程历程增加不少乐趣。下面说说php开发的辅助技能:
 
1、如果你对和你搭档的前端看上眼,先找找是不是自己的问题。有空再学些前端的一些框架,像Vue,Angular,Layui,Bootstrap看看没坏处,你就差不多能知道前端在干嘛了(你以前看的那些div+css,怎么说,只能是砖——)。
 
2、慢慢的其实你发现,只要你正儿八经的写php,你始终绕不开Apache+Nginx+Mysql+域名+Linux+WinServer,这些东西,没事再多看看,不用像运维一样,完全熟悉Linux下的php环境搭建,起码简单基础的东西要会一些,万一哪天运维跑路了,丢下公司一个唯一会代码的你,你走上人生巅峰的机会就到了,要时刻准备着。
 
3、光看了前端框架什么的,还不行,你要学会怎么和前端打成一片,揍也行。初级的是放出数据给前端用,俩岗位一起模索,中级一点,能想到各类前端用到的接口数据,提前测试好,前端直接能用。
 
高阶一点,就可以指导前端怎么写了,你的接口在那,用最省事最简单的方法给前端用,因为你懂前端,注意好纸巾给前端用,因为你们是兄弟了,准备好给他擦去感动的鼻涕。
 
这个时候你需要知道json,javascript,utf8 unicode的一些东西,起码做到和前端沟通不挨打。
 
4、有空和pm一起吃个火锅。pm可能是你们的产品经理,也可能只是一个设计,或者是你们老板,包括甲方巴巴。多听听他们对于产品开发的想法,站在开发的角度提出你的设想,有些东西真不是能想出来就能开发出来的,而且怎么实现,开发思路和设计思路完全不一样,要不在一根线上交流,那就等着闹心吧。
 
举个例子:登录注册功能,下面不放图了,凭空想象。
 
正常情况是,输入用户名,输入手机号,输入验证码,输入密码,二次密码。但这样有个问题,无论你设置多久获取一次手机验证码,总有匪·徒想尽办法盗用你的短信接口,无数次刷验证码,解决办法很简单,在获取手机验证码前,加一道普通验证码,像极验那样的也行,或者直接出来字母数字都行,关键是这个界面怎么设置合理,让用户一看就知道要先验证,再获取手机号,而不是把前面的验证码输入和手机号输入搞反。
 
当然,现在在后端通过ip和浏览器可以锁定,防止刷验证码,另外一个手机号规定时间内也会有收指定接口验证码的限制。当然的当然,什么高一尺,什么高一丈的,这是个技术博弈的过程,就看你的脑袋有没有思路。
 
5、进入高并发,多cdn,负载均衡,Hadoop,在系统复杂化,多任务多流量并发的情况下,这条路是开发者必须要走的路了,能走多久,能升多高,就看个人造化了,和你努力不努力可能关系不大了,天天用上吃奶的劲琢磨这些东西,自己3个人的公司,可能一个虚拟主机就解决问题了,看造化,看佛缘,能进jzat(京东,字节跳动,阿里,腾讯)就有施展的机会。
 
通过上面的积累,工嘿雷,你将会成为头顶银冠,手持三角键盘的全栈攻城狮,一人之下,三人之上(pm,设计,开发)。
 
接下来就多吃吃英文开发文档,等吃够一本新华字典,那么……
 
这时离走上cto可能只差一个像样的鼠标了,听说cto没有用鼠标的习惯,都是意念操作计算机,知道朋友帮忙证实下。
 
现在回答前面提出的两个问题:你的动手能力怎么样?你的是为兴趣还是混口饭吃?
 
1、学习程序开发,不论哪种语言,都需要极强的动手能力,哪怕把别人的代码拿过来参考,也需要自己动手,一个字:写。这都懒得做,那后面的路真不好走,不写,常用的一些单词敲起来不顺手,那就太Low了,老程序员试试输入:function,class,body,style,是不是闭着眼睛就能敲出来,连Alt+Tab都用不溜,那就要找找自己的初衷了。
 
2、如果纯混饭吃,那就把一门语言研究透,研究明白,java,php,Python,go,c,C#,c++都一样,不要天天想着这语言学了,怕以后没有市场了之类的,再小众的语言,只要在这个市场还有存量,就有人用,就有企业需要,就有它的用武之地。
 
如果是兴趣,那就把广度提升,每个语言都有自己魅力的地方,用不同的语言,写出一个功能的那个成就感,普通人是没法理解的,就像我在过年的时候,用Python弄了一天,研究明白怎么输出我想要的日历样式,那真是激动有种憋尿的冲动。
 
 
最后开发最大的心得:模块化,方法化,逻辑化,备注化。
 
逻辑化,就是在开发前,你要想明白你实现的这个功能具体是什么形式的,用什么流程控制,什么条件判断,用什么姿势循环,一定要想明白。
 
方法化,是指所有的工程代码,都是由若干小方法实现的。比如你要用php实现抓取一个网页中指定的内容。首先实现怎么远程抓取指定页面的所有代码,这个实现了放一边。另外再实现怎么从众多html标签中找到指定片段进行截取,是用闭合标签形式还是正则匹配,这个方法能不能用到所有要抓取页面的结构中,这个实现后再放一边。接下来做怎么进行关键数据的截取,什么哪些方法实现截取多少位的字符,截前多少位,截后多少位,正数往后截多少,倒数往后截多少等等。以上方法实现了,就差不多可以把这些小功能(方法)整合到一起,成为一个php抓取页面的方法。
 
做程序开发,一定要有拆分功能的能力,把一个大的需要功能拆分成若干小的,再分别进行实现,如果是团队开发的话,就需要模块化。
 
模块有大有小,按具体开发项目分,没有标准,没有规则。模块化开发最重要的是模块与模块之间,模块与系统之间的数据交换问题,如果你只是个小程序员,倒也不用太担心这些,但还是自己多想想,自己开发的模块与其他模块之间的数据问题,比如你是开发详情页的,有的详情页需要登录才可以有部分操作,有的页面不需要,这个时候你的cookies需要怎么处理,如何协同全局cookies,如果你用的是Thinkphp这类成熟框架,倒也不用太担心。
 
备注化,比较好理解,但凡自己写过的代码,能备注的尽量做到详细备注,哪怕还有开发文档,在代码处还是做好备注,一来方便别人调试,另外自己以后看也方便,我就有经常看不懂自己写的一些实现方法,需要从头阅读,把调用的方法再读一遍,理解了再来。
 
以上,就是身为一个开发半桶水的人,给一个php开发自学的朋友的一些建议和想法。注意:我是php开发半桶水,不接受用过于专业的技术问题打我,我会没有还手之力的。
 
林羽凡-Llinyufan.com 于2020年4月的最后一天的前一天。

有好的文章希望林羽凡帮助分享和推广,猛戳这里我要分享

作者:林羽凡
人生不是一种享乐,而是一桩十分沉重的工作。-- 列夫·托尔斯泰
返回列表
上一篇: