为了本身对php的系统全面深刻的掌握,我经过我的经验,以及搜索网上高手经验,汇总了一份php自我学习路线规划,包括实战演练、学习建议、高手进阶、常见问题和测试总结五块。算是一个系统的学习计划和目标吧。
避免盲目学习,对提升有所指引。但愿自我加压,经过努力修炼达到高手水平。天道酬勤,自我勉励!此路线仅适合我本人。javascript
部分摘自博客,参看:【原创】PHP程序员的技术成长规划 http://blog.csdn.net/heiyeshuwu/article/details/40098043
这个php成长规划清晰明确,很是专业。
-------------------------------------------------------------
1、实战演练
熟悉语法&api -> 阅读zend、ci、wordpress源码 -> 用PHP独立开发项目 -> 深刻了解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 等)css
最紧要实战:
(2周)3个站(至少20个美工页面)psd to html 切制练习。
(1周)jquery实战演习
(1月)用zf框架,开发模块,达到灵活掌握html
必须掌握的知识点:
数据库必须熟练掌握 mysql & sqlserver,同时必须熟练zendstdio的操做。
熟练进行phpmyadmin的操做。
adodb(数据库接口)+javascript+xml+ajax(异步JavaScript和XML)+jquery(JS框架),
熟悉OOP编程,学习thinkphp,zf框架,学习smarty模板引擎,pear (PHP扩展与应用库),prototype(设计模式)。
对apache也应该买本管理员手册好好看看。
同时大体了解一下linux等等。以及服务器管理等操做。
-------------------------------------------------------------
2、学习建议前端
"函数参考"那部分没必要全看,可是 日期与时间、文件系统、其它基本扩展、Session、变量与类型 这几部分建议必定要翻一下,里面介绍了不少经常使用的函数和类。
这些函数没必要都记住,只要有个印象就行,之后用到时再回来翻,用的多了天然就记住了。
先从留言本作起,再作个我的博客,而后再作个复杂点儿的CMS,或者小OA,所谓经验,其实就是解决问题的方法,从项目中不断思考,就能不断收获!
想學好PHP OOP, 直接上Zend Framework 2,半年後你會覺得本身進步許多
总结:自学很是重要,实际项目经验也很重要。不要觉得计算机基础不重要,学习计算机基础对学习编程语言很是有用。只要对本身狠一点,多下功夫,没有攻不破的东西。java
1基础PHP程序员
重点:把LNMP搞熟练(核心是安装配置基本操做)
目标:可以完成基本的LNMP系统安装,简单配置维护;可以作基本的简单系统的PHP开发;可以在PHP中型系统中支持某个PHP功能模块的开发。
基本语法数组、字符串、数据库、XML、Socket、GD/ImageMgk图片处理等等;熟悉各类跟MySQL操做连接的api(mysql/mysqli/PDO),知道各类编码问题的解决;知道常规熟练使用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf等);了解基本MVC的运行机制和为何这么作,稍微知道不一样的PHP框架之间的区别;可以快速学习一个MVC框架。可以知道开发工程中的文件目录组织,有基本的良好的代码结构和风格,可以完成小系统的开发和中型系统中某个模块的开发工做。node
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引擎/扩展基本工做机制);mysql
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。jquery
3、高手进阶linux
英文好的话推荐看 https://tutsplus.com/ (免费版本http://code.tutsplus.com/),虽然要付费(年付15美金/月),可是你获得的将更多。
我已经持续付费两年了,最先学php,而后跟进CI、Laravel等框架,后来学jquery、angularjs等,都在项目中实际应用了,ror、nodejs也跟着学了学,可是没有机会使用。
老外高手作的教学不但教程安排合理,节奏比较快,不浪费你的时间并且让你可以保持高度注意力集中,而且能够看看高手的编程习惯和工具,学习到的都是业界最新的东西,如各类编辑器的workflow,秒杀国phper的视频。
研究php内核
php技术架构
最好能参与php开源项目
-------------------------------------------------------------
4、常见问题
技术线(偏深度):
php常见问题列表:
1.看看简历,会问一些过去作的项目的用户量、pv、吞吐量、相关难点和解决方法等
2.数据库设计经验,为何进行分表? 分库?
通常多少数据量开始分表? 分库? 分库分表的目的? 什么是数据库垂直拆分? 水平拆分? 分区等等?能够举例说明
3.数据库优化有哪些? 分别须要注意什么?
4.web开发方面会遇到哪些缓存? 分别如何优化?
5.给你256M的内存,对10G的文件进行排序(文件每行1个数字),如何实现?
对10G的文件进行查找如何实现?
统计10G文件每一个关键字出现的次数如何实现?
6.假如你如今是12306火车订票的设计师,你该如何设计知足全国人民订票?
7.假若有1亿用户的访问量,你的服务器架构是怎样的? 用户信息的存储方案如何设计?
8.若是你是技术组长,所带团队任务进度没法完成你该如何解决?
若是在进度排满的前提下插入任务,你该如何保证总进度不延期?
若是有的工程师今天预约任务没有完成,你该如何解决?
9.从你的经验方面谈一下如何构建高性能web站点? 须要哪些环节? 步骤? 每一个步骤须要注意什么如何优化等?
5、调试总结
我目前经常使用的调试方法:
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/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