php自学提升进阶路线
为了自己对php的系统全面深入的掌握,我通过个人经验,以及搜索网上高手经验,汇总了一份php自我学习路线规划,包括实战演练、学习建议、高手进阶、常见问题和测试总结五块。算是一个系统的学习计划和目标吧。
避免盲目学习,对提高有所指引。希望自我加压,通过努力修炼达到高手水平。天道酬勤,自我勉励!此路线仅适合我本人。
部分摘自博客,参看:【原创】PHP程序员的技术成长规划 http://blog.csdn.net/heiyeshuwu/article/details/40098043
这个php成长规划清晰明确,非常专业。
-------------------------------------------------------------
一、实战演练
熟悉语法&api -> 阅读zend、ci、wordpress源码 -> 用PHP独立开发项目 -> 深入了解PHP引擎实现细节、扩展编写、性能优化等
(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,半年後你會覺得自己進步許多
总结:自学非常重要,实际项目经验也很重要。不要以为计算机基础不重要,学习计算机基础对学习编程语言非常有用。只要对自己狠一点,多下功夫,没有攻不破的东西。
1基础PHP程序员
重点:把LNMP搞熟练(核心是安装配置基本操作)目标:能够完成基本的LNMP系统安装,简单配置维护;能够做基本的简单系统的PHP开发;能够在PHP中型系统中支持某个PHP功能模块的开发。
基本语法数组、字符串、数据库、XML、Socket、GD/ImageMgk图片处理等等;熟悉各种跟MySQL操作链接的api(mysql/mysqli/PDO),知道各种编码问题的解决;知道常规熟练使用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf等);了解基本MVC的运行机制和为什么这么做,稍微知道不同的PHP框架之间的区别;能够快速学习一个MVC框架。能够知道开发工程中的文件目录组织,有基本的良好的代码结构和风格,能够完成小系统的开发和中型系统中某个模块的开发工作。
2中级PHP程序员
重点:提高针对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引擎/扩展基本工作机制);
3高级PHP程序员
重点:除了基本的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等,我始终觉得只会一门语言不是什么好事情
php常见问题列表:
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 "<pre>"; 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." ");
fclose($fd);
}
有个调试技术的博客总结的挺全面。参看下面。
博客地址:http://blog.csdn.net/heiyeshuwu/article/details/5684307
在线查看:http://down.51cto.com/data/155822
PHP调试技术手册发布(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
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。