为了自己对php的系统全面深入的掌握,我通过个人经验,以及搜索网上高手经验,汇总了一份php自我学习路线规划,包括实战演练、学习建议、高手进阶、常见问题和测试总结五块。算是一个系统的学习计划和目标吧。
避免盲目学习,对提高有所指引。希望自我加压,通过努力修炼达到高手水平。天道酬勤,自我勉励!此路线仅适合我本人。
部分摘自博客,参看:【原创】PHP程序员的技术成长规划 http://blog.csdn.net/heiyeshuwu/article/details/40098043
这个php成长规划清晰明确,非常专业。
-------------------------------------------------------------
熟悉语法&api -> 阅读zend、ci、wordpress源码 -> 用PHP独立开发项目 -> 深入了解PHP引擎实现细节、扩展编写、性能优化等
(1周)HTML+CSS HTML5+CSS3
(2-3天)留言板或记事本,(增删改查,数组函数数据库函数)
(7天)bbs或企业网站,(模板、分页、权限)phpchina的高手PHP高手带路--问题汇总解答以及PHP手册
(1个月)学习discuz学习外国的开源程序(zencert Joomla drupal).学习phpchina上的精华知识。
(1个月)深入学习zf框架(增删改查,权限控制,前端模板页面等)
(长期总结)对自己做过的小项目进行总结,用面向对象思想,对结构优化。
看开源的框架源码(这步请注意找一些比较小巧的开源框架如 CI,Slim ),增强对 MVC 的理解
更加深入的系统的学习(MySQL Linux C 语言 javascript html css redis 等)
(2周)3个站(至少20个美工页面)psd to html 切制练习。
(1周)jquery实战演习
(1月)用zf框架,开发模块,达到灵活掌握
数据库必须熟练掌握 mysql & sqlserver,同时必须熟练zendstdio的操作。
熟练进行phpmyadmin的操作。
adodb(数据库接口)+javascript+xml+ajax(异步JavaScript和XML)+jquery(JS框架),
熟悉OOP编程,学习thinkphp,zf框架,学习smarty模板引擎,pear (PHP扩展与应用库),prototype(设计模式)。
对apache也应该买本管理员手册好好看看。
同时大致了解一下linux等等。以及服务器管理等操作。
-------------------------------------------------------------
"函数参考"那部分不必全看,但是 日期与时间、文件系统、其它基本扩展、Session、变量与类型 这几部分建议一定要翻一下,里面介绍了很多常用的函数和类。
这些函数不必都记住,只要有个印象就行,以后用到时再回来翻,用的多了自然就记住了。
先从留言本做起,再做个个人博客,然后再做个复杂点儿的CMS,或者小OA,所谓经验,其实就是解决问题的方法,从项目中不断思考,就能不断收获!
想學好PHP OOP, 直接上Zend Framework 2,半年後你會覺得自己進步許多
总结:自学非常重要,实际项目经验也很重要。不要以为计算机基础不重要,学习计算机基础对学习编程语言非常有用。只要对自己狠一点,多下功夫,没有攻不破的东西。
重点:把LNMP搞熟练(核心是安装配置基本操作)
目标:能够完成基本的LNMP系统安装,简单配置维护;能够做基本的简单系统的PHP开发;能够在PHP中型系统中支持某个PHP功能模块的开发。
基本语法数组、字符串、数据库、XML、Socket、GD/ImageMgk图片处理等等;熟悉各种跟MySQL操作链接的api(mysql/mysqli/PDO),知道各种编码问题的解决;知道常规熟练使用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf等);了解基本MVC的运行机制和为什么这么做,稍微知道不同的PHP框架之间的区别;能够快速学习一个MVC框架。能够知道开发工程中的文件目录组织,有基本的良好的代码结构和风格,能够完成小系统的开发和中型系统中某个模块的开发工作。
重点:提高针对LNMP的技能,能够更全面的对LNMP有熟练的应用。
目标:能够随时随地搭建好LNMP环境,快速完成常规配置;能够追查解决大部分遇到的开发和线上环境的问题;能够独立承担中型系统的构架和开发工作;能够在大型系统中承担某个中型模块的开发工作;
除了第一阶段的能力,安装配置方面能够随意安装PHP和各种第三方扩展的编译安装配置;了解php-fpm的大部分配置选项和含义(如max_requests/max_children/request_terminate_timeout之类的影响性能的配置),知道mod_php/fastcgi的区别;在PHP方面已经能够熟练各种基础技术,还包括各种深入些的PHP,包括对PHP面向对象的深入理解/SPL/语法层面的特殊特性比如反射之类的;在框架方面已经阅读过最少一个以上常规PHP MVC框架的代码了,知道基本PHP框架内部实现机制和设计思想;在PHP开发中已经能够熟练使用常规的设计模式来应用开发(抽象工厂/单例/观察者/命令链/策略/适配器 等模式);建议开发自己的PHP MVC框架来充分让开发自由化,让自己深入理解MVC模式,也让自己能够在业务项目开发里快速升级;熟悉PHP的各种代码优化方法,熟悉大部分PHP安全方面问题的解决处理;熟悉基本的PHP执行的机制原理(Zend引擎/扩展基本工作机制);
重点:除了基本的LNMP程序,还能够在某个方向或领域有深入学习。(纵深维度发展)
目标:除了能够完成基本的PHP业务开发,还能够解决大部分深入复杂的技术问题,并且可以独立设计完成中大型的系统设计和开发工作;自己能够独立hold深入某个技术方向,在这块比较专业。(比如在MySQL、Nginx、PHP、Redis等等任一方向深入研究)
作为基础核心技能,我们在第二阶段的基础上面,需要有更深入的学习和应用。从基本代码应用上面来说,能够解决在PHP开发中遇到95%的问题,了解大部分PHP的技巧;对大部分的PHP框架能够迅速在一天内上手使用,并且了解各个主流PHP框架的优缺点,能够迅速方便项目开发中做技术选型;在配置方面,除了常规第二阶段会的知识,会了解一些比较偏门的配置选项(php auto_prepend_file/auto_append_file),包括扩展中的一些复杂高级配置和原理(比如memcached扩展配置中的memcache.hash_strategy、apc扩展配置中的apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection之类的);对php的工作机制比较了解,包括php-fpm工作机制(比如php-fpm在不同配置机器下面开启进程数量计算以及原理),对zend引擎有基本熟悉(vm/gc/stream处理),阅读过基本的PHP内核源码(或者阅读过相关文章),对PHP内部机制的大部分核心数据结构(基础类型/Array/Object)实现有了解,对于核心基础结构(zval/hashtable/gc)有深入学习了解;能够进行基本的PHP扩展开发,了解一些扩展开发的中高级知识(minit/rinit等),熟悉php跟apache/nginx不同的通信交互方式细节(mod_php/fastcgi);除了开发PHP扩展,可以考虑学习开发Zend扩展,从更底层去了解PHP。
-------------------------------------------------------------
英文好的话推荐看 https://tutsplus.com/ (免费版本http://code.tutsplus.com/),虽然要付费(年付15美金/月),但是你得到的将更多。
我已经持续付费两年了,最早学php,然后跟进CI、Laravel等框架,后来学jquery、angularjs等,都在项目中实际应用了,ror、nodejs也跟着学了学,但是没有机会使用。
老外高手做的教学不但教程安排合理,节奏比较快,不浪费你的时间而且让你能够保持高度注意力集中,并且可以看看高手的编程习惯和工具,学习到的都是业界最新的东西,如各种编辑器的workflow,秒杀国phper的视频。
研究php内核
php技术架构
最好能参与php开源项目
-------------------------------------------------------------
技术线(偏深度):
1. 基础知识,比如数据结构,多线程,I/O,Http协议等
2. 语言深度,比如PHP的运行机制,性能优化,APC(以及其原理等)
3. 源码阅读,比如看过哪些框架,其中的机制是怎么样的,往细了问
4. 知识宽度,静态语言,比如C、Java等,我始终觉得只会一门语言不是什么好事情
1.看看简历,会问一些过去做的项目的用户量、pv、吞吐量、相关难点和解决方法等
2.数据库设计经验,为什么进行分表? 分库?
一般多少数据量开始分表? 分库? 分库分表的目的? 什么是数据库垂直拆分? 水平拆分? 分区等等?可以举例说明
3.数据库优化有哪些? 分别需要注意什么?
4.web开发方面会遇到哪些缓存? 分别如何优化?
5.给你256M的内存,对10G的文件进行排序(文件每行1个数字),如何实现?
对10G的文件进行查找如何实现?
统计10G文件每个关键字出现的次数如何实现?
6.假如你现在是12306火车订票的设计师,你该如何设计满足全国人民订票?
7.假如有1亿用户的访问量,你的服务器架构是怎样的? 用户信息的存储方案如何设计?
8.如果你是技术组长,所带团队任务进度无法完成你该如何解决?
如果在进度排满的前提下插入任务,你该如何保证总进度不延期?
如果有的工程师今天预定任务没有完成,你该如何解决?
9.从你的经验方面谈一下如何构建高性能web站点? 需要哪些环节? 步骤? 每个步骤需要注意什么如何优化等?
10. 为什么要对数据库进行主从分离?
11. 如何处理多服务器共享session?
12. 一个10G的表,你用php程序统计某个字段出现的次数,思路是?
13. 会告诉你一个nginx日志例子,用你认为最佳的编程语言统计一下http响应时间超过1秒的前10个url?
14. 给你一个mysql配置文件,用你认为最佳的编程语言解析该文件?
15. 给你两个路径a和b,写一个算法或思路计算a和b差距几层并显示a和b的交集?
16. 给你一个url,在nginx配置一下rewrite指定到某个具体路径?
17. 一个php文件的解释过程是? 一般加速php有哪些? 提高php整体性能会用到哪些技术?
18. session和cookie生存周期区别? 存储位置区别?
19. require、include、require_once、include_once区别? 加载区别? 如果程序按需加载某个php文件你如何实现?
20. chrome号称为多线程的,所以多线程和多进程的区别为?
21. php在2011年底出现hash碰撞,hash碰撞原理为? 如何进行修复?
22. web不安全因素有哪些? 分别如何防范?
23. 假如两个单链表相交,写一个最优算法计算交点位置,说思路也可以?
24. 假如你是技术组长? 如何提高团队效率?
25. nginx负载均衡有哪些? 如果其中一台服务器挂掉,报警机制如何实现?
26. 不优化前提下,apache一般最大连接数为? nginx一般最大连接数为? mysql 每秒insert ? select ? update ? delete?
27. mysql 数据类型有哪些 ? 分别占用多少存储空间 ?
28. nginx设置缓存js、css、图片等信息,缓存的实现原理是?
29. 如何提高缓存命中率? 如何对缓存进行颗粒化?
30. php的内存回收机制是?
31. 我的所有问题都问完了,你有什么问题问我没有?
-------------------------------------------------------------
echo 和echo "
"; print_r(method); 脚本js就是alert方式。 css调试就是弄成色块加上边框等
日志方式用于无法打印时。logToFile("my.log", "out page:".$_POST ['cpage']);
function logToFile($filename,$msg){
$fd=fopen($filename, "a");
$str="[".date("Y/m/d h:i:s",mktime())."]".$msg;
fwrite($fd, $str."\n");
fclose($fd);
}
有个调试技术的博客总结的挺全面。参看下面。
博客地址:http://blog.csdn.net/heiyeshuwu/article/details/5684307
在线查看:http://down.51cto.com/data/155822PHP调试技术手册发布(1.0.0 pdf)目录
1 内置API输出调试
1.1 基本调试API
1.1.1 echo (print):
1.1.2 printf
1.1.3 print_r、var_dump(var_export)、debug_zval_dump
1.2 错误控制和日志记录调试
1.2.1 错误选项控制
1.2.2 错误抛出和处理
1.2.3 使用错误抑制符
1.2.4 日志记录
2 浏览器调试
2.1 页面输出调试
2.2 FirePHP 调试
2.2.1 普通变量监测
2.2.2 调用栈监测
2.2.3 监测抛出异常
2.2.4 组显示信息
3 IDE 调试
3.1 基本常用IDE介绍
3.1.1 Vim
3.1.2 Zend Studio
3.1.3 Eclipse
3.1.4 NetBeans
3.2 IDE调试
3.2.1 Zend Studio + Zend Debugger
3.2.2 Eclipse (PDT) + Xdebug
3.2.3 Vim + Xdebug + DBGp
4 PHP 性能调试技术
4.1 基本时间占用监测
4.2 使用 Xdebug 进行性能分析
4.2.1 安装配置:
4.3 APD(Advanced PHP Debugger)
4.3.1 安装配置
4.3.2 使用APD
4.4 使用Xhprof 进行性能分析
4.4.1 Xhprof 的优点:
5 PHP单元测试技术
5.1 PHPUnit
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://blog.csdn.net/wellsoho/article/details/49660179
https://www.cnblogs.com/aksir/p/6774115.html