2017年下半学年PHP学习总结



 自寒假开学前的两周开始自学PHP,

 用了大概两周的时间熟悉html+css,之后看了两周的php手册并学习了Mysql的CRUD操作,写了一个很简单的基于数据库的注册登录网站,实现了通过form表单向后台传输数据,注册时后台接受数据并写入数据库,登陆时后台将传来的数据和数据库中的数据做比较,根据结果向用户显示登陆成功或登录失败。

 之后又花了两周的时间学习了Mysql,比较全面的学习了Mysql的基础操作和高级语句,但实际运用上仍需经常翻看资料和笔记。

 再然后学习到了JSON数据格式,并开始接触框架,最先接触到的是CI框架,第一个练手的项目还是注册登录,比起第一次做的版本,有如下改进:
 
 1,面向接口编程,php文件只负责后台逻辑判断,而不关心前台页面的具体实现:登录、注册成功后向前台返回json数据而不是php文件自己根据结果显示页面。
 2,在向数据库写入之前,对数据做合法性检测,如:注册时是否存在重复用户名、登录时用户名是否存在。
 3,使用cookie&&session技术,登录成功后,在服务端储存session,在客户端储存cookie,从而达到在设置的时间段内避免重复登录的功能。
 4,对存入数据库的密码等敏感数据,运用md5()等函数进行加密。

 完成这个练手项目后,刷了两天的CI框架用户手册,前后用了大概一周的时间编写和完善了一个个人博客系统,实现了登录、留言板、博文的发表编辑和删除、首页文章概要、文章列表、集成富文本编辑器等功能,通过编写代码比较系统的对先前所学的html+css+php+Mysql进行了一次总结,主要收获有:

 1,对前台传来的数据的安全性又有了进一步认识,使用htmlspecialchars()、addslashes()、和SQL绑定实现对数据的过滤。
 2,相对于之前的项目,比较详细的设计了数据库,而不是把所有的字段都储存在一张表中
 3,养成了在着手写项目前,先利用工具画简单的思路图的习惯,在写代码前理清数据库中各数据表的逻辑关系和网站中各部分功能之间的关系,而不是想到那写到哪,哪不行就改哪。
 4,真正意义上第一次用html+css写了一个前端界面,虽然没有ui,但是界面勉强能看。
 5,博客写完后将博客挂在了阿里云上,第一次接触到配置服务器,并在遇到各种问题一查一晚上资料的过程中获益匪浅。

 项目做完后,对MVC模式有了初步的认识,同时也发现了一些知识盲区和能力上的不足,如:
 1,面向接口编程,前台是怎样获取到php文件返回的数据的?通过form表单提交数据时,页面会直接跳转到action属性填写的php页面,而php界面只会输出一串JSON字符串,这显然不是我想要的效果,那么前端又是怎么向后台发送请求的?。
 2,对cookie的理解比较浅薄,只能简单的存储用户信息,用户可能会恶意修改cookie文件从而达到访问其他用户帐号的目的。
 3,编写个人博客的时候,在前端页面上花费了大量的时间,却收效甚微。
 4,对Linux不熟悉,对网站服务器的配置文件不熟悉。

 博客做完后,我开始从头看《php之道》,过滤自己不足或是不知道的知识点,期间自己使用include实现了简单的MVC模式,并编写了日历、网站签到系统、信息管理系统、网站分页等纯php项目和功能。php之道刷完后,有了以下几点收获:

 1,较为系统的学习了一遍PHP,熟悉了之前不知道的一些魔术方法。
 2,了解了策略模式、单例模式、工厂模式等设计模式。
 3,初步了解闭包、回调函数的概念。
 4,学会了使用namespace命名空间。
 5,熟悉了PHP中面向对象的特性。

 之后针对在学习CI框架时遇到的问题,通过查阅资料和请教他人,知晓了AJAX的概念,并在接下来的时间内着手学习这个知识点,附带的,也开始了对JavaScript的求知探索。
 通过一段时间的学习后,对面向接口开发时的前后端交互的思路开始清晰起来,明白了如何通过Javascript从页面获取数据,并使用AJAX向后台(php文件)传输和接受数据。并动手实现了基于AJAX功能的表单验证,使用JavaScript实现了图片自动切换、鼠标悬停下拉菜单、网页自动跳转、tab切换等网页常见功能。了解了jquery和Bootstrap的概念。

 这个时候接到了学习群里一个网站的开发任务,要求使用TP5框架,于是又开始了Thinkphp5的学习
 很巧的是,这次我的任务还是写登录注册,有了一种达芬奇画鸡蛋的感觉...
 开始的学习无非就是增删改查,之后基本页面也就做出来了,经历了轻量级的CI框架的简洁,TP5就复杂得多了,其中的各种方法在我一个新手看来更是一个又一个的奇淫巧技,又有了刚接触前后交互时的兴奋和冲动,经过几周的学习和开发,又是收获颇多:
 1,对TP5框架的学习更为全面,TP5的用户手册显然比CI要厚得多,通过一边啃手册一边做项目,对TP5框架的理解更为全面,掌握的也更为熟练。
 2,因为没有UI和前端的人参与,尝到了直接套用模版的甜头和苦头:节省大量在前端上的花费,但同时页面功能比较受限,添加或修改功能需要翻查源代码,而模版文件又没有手册,非常痛苦。
 3,学会了使用基于TOKEN的身份加密在cookie中储存用户信息,达到无状态验证的同时避免恶意修改cookie的目的。
 4,以往都是自己写小项目,第一次体验到了分工合作的感觉,感受到了团队协作中交流的重要性,同时对Git的理解又加深了一步。
 5,认识到以往对数据的合法性检测太过简单,学过JS之后一直觉得只要通过对JS进行数据判断,后台就不比再写多余的代码,实际应用中发现,用户可以通过直接发送HTTP请求从而跳过JS验证,所以无论前端做了什么,后台还是要尽可能详尽的做数据合法性判断(即使在绝大多数情况下这些代码都并不会执行),遇到非法数据返回错误信息。
 6,阅读小组其他人编写的代码,获益良多,之前闭门造车,虽然大多数时候结果做出来了,但代码冗余度高、不习惯或不规范的使用注释,导致自己读自己以前写过的代码都比较费力

 在这过程中除了因为各种没有经验而导致的bug外,最大的问题就是因为缺乏阅读他人代码的习惯,虽然功能写出来了,但是却错误的使用了model,将大量的数据库操作写在了controller中,导致后续代码结构较乱,更像是面向过程而不是面向对象。

 同时也认识到自己对HTML和CSS的理解比较浅薄,虽然方向是后端,但是自己写项目的时候是不可能不写前端界面的,日后需要深入学习。

 转眼就到了学期末,在剩下的不多的时间里,我开始复习+深入学习设计模式和依赖注入等设计理念,并初步定下了暑期的学习计划:

 主要任务:
 1,通过看书,更加系统、深入的学习Mysql数据库。
 2,通过看书+实践,学习Linux操作系统。
 3,对于PHP的学习不能停下,在校期间对PHP的学习大部分时间花在了啃手册上,假期把重点放在练习+阅读源码上。

 陶冶情操项:
 1,巩固基础知识,以数据结构为主、计算机网络为辅。
 2,巩固前端知识,因为是后端方向,所以将更多的精力放在框架而不是底层的学习上。

你可能感兴趣的:(php,总结)