从2012年就已经接触php了,一直到现在做了已经两三年了,也走过无数的弯路,也通宵熬过无数次夜,看过各种各样的PHP书籍,博客等,做一下总结,全当是对自己过去这一段时间的总结。
php是一个弱类型的语言,所谓若类型的语言并不是之没有类型区分,而是说没有明显的类型定义,php的变量不需要提前定义,只需要一个$符号就可以了,如:$a/$b/$c。 php变量在底层的实现是用c中的共同体(Union)实现的,只是php变量会在操作的时候自动进行类型转换,其次,php的变量采用的是“引用复制”和“写时复制”的机制。
php学到后期会有种不知道该怎么学习的状态,感觉功能的实现都可以实现,没有什么东西可以学习,确实php到后期本身没有什么好学的,此时可以尝试学习一些设计模式,去看一些开源的代码,去尝试着封装一下MVC,尝试着用原生态的PHP语言去实现一些框架中的封装。看完这些之后,可以尝试的去看一下php的源码,也许你此时会发现php的源码还是很难理解的,没关系,一开始都是这样,你可以在这之前去重新学习一下c语言和c++,此时也许你会发现从c到c++其实是一个封装的过程,你也会发现,php源码中用到了大量的结构体(struct),define,typedef,以及大量的一重二重三重指针,你会发现php不是没有什么可以学习,是需要更深层次的挖掘,好了接下来的日子就有事情可以干了,看看PHP的源码,尝试着实现一下php的扩展,放到自己的环境中调用一下。
php后期并不是没有什么可以学习的,而是它本身语言就比较简单,如果只是学习应用层面的东西那就真的没有东西可以学习了。好了大致看完源码之后你会发现php之后会被解析成opcode然后才会被执行,你会知道apc的用法,memcache以及radius的/概念,你会对php有一层更加深入的了解,那下面咱们转向优化方面。
php是一门web开发语言,所以涉及到web就要涉及到优化,怎么说优化呢?网站的瓶颈一般存在与两个地方一个是数据库的瓶颈,一个是php语言的瓶颈,数据库方面:表结构的优化,mysql引擎的选择,索引的添加,纵向分表,横向分表,主从数据库读写分类,集群。php方面咱们可以从优化view层中的css 和 js说起,对css和js进行压缩合并,图片进行处理,图标进行合并等操作。controller层对sql语句进行优化,减少关联查询和子查询的使用,可以把sql语句拆开执行,然后在拼合数据。采用页面静态化处理部分不经常变动的页面,采用memcache/apc/radius作为数据库缓存,缓解数据库压力,采用opcode功能减少php的解析(php5.5之后自带opcode舍去了apc,也可以通过apc实现),选择速度更快的nginx代替apache服务,对服务器做集群等等。当然php本身写法上也有优化技巧比如单引号与双引号的使用,include 和 requice的使用等等,不再叙述。至此你需要学习的东西还有很多。
当感觉学习一门弱类型语言没有什么提高的时候,也许你可以再去学习一下强类型语言,比如说学习java做jsp的时候你会发现jsp中并没有你所理所当然的session,你可以选择用map、hashmap等已有的数据结构来封装session,你可能已经习惯了框架给你提供的功能,但是在这里,你确实需要自己去封装一个数据库的链接读取并把数据返回到一个map中的方法以方便你的开发。
当你感觉学习php没有什么提高的时候,也许你应该去学学linux,其实不需要去看多少书,换上一个linux系统,尝试着去用它。你会发现linux其实要比windows更好用,你可以去搭配一套lnmp/lamp,尝试去写一点shell代码,去自动备份你的数据库,甚至去论循你的php以实现某种功能,你也可以很方便的配置php的xdebug去尝试用断点调试php程序,也可以很方便的去写一些php的扩展,配置memcache等等等等,你可以尝试使用vim去写一些东西,尝试去使用gcc编译c尝试去使用gdb调试程序,尝试去用命令行去干更多的事情,你会发现php其实和linux才是绝配。
这个时候你已经可以熟练的去使用linux了,为什么不尝试自己去实现一个小小的框架,去分析一下常用框架中的技巧,php的面向对象,php的魔法函数,php如何实现多态,以及php在apache中是怎么运行的,nginx为什么比apache性能高,如何在多台服务器下去共享session,如何利用curl去调用一些接口实现开发过程中的某些场合的使用,如何去使用serialize /unserialize去实现一些数据的序列化存储反序列话使用,如何去抓取一些网站的内容,以及如何去改进一些使用习惯。总之,你需要做的还很多,php并不是没有什么可以学的,而是不应该一直停留在代码阶段,应该去学习更深入的东西,要相信当你感觉没有什么东西可以学习的时候有很大一部分是因为你的知识范围还太小,认知层面还太浅。
编程不容易,且行且珍惜,找工作也不容易,所以不管任何时候还是要努力提高自己。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wyfhist/article/details/47008225