phper进阶路线
为了⾃⼰对php的系统全⾯深⼊的掌握,我通过个⼈经验,以及搜索⽹上⾼⼿经验,汇总了⼀份php⾃我学习路线规划,包括实战演练、学习建议、⾼⼿进阶、常见问题和测试总结五块。算是⼀个系统的学习计划和⽬标吧。
避免盲⽬学习,对提⾼有所指引。希望⾃我加压,通过努⼒修炼达到⾼⼿⽔平。天道酬勤,⾃我勉励!此路线仅适合我本⼈。
部分摘⾃博客,参看:【原创】PHP程序员的技术成长规划
这个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、变量与类型这⼏部分建议⼀定要翻⼀下,⾥⾯介绍了很多常⽤的函数和类。
这些函数不必都记住,只要有个印象就⾏,以后⽤到时再回来翻,⽤的多了⾃然就记住了。
php手册官方中文版先从留⾔本做起,再做个个⼈博客,然后再做个复杂点⼉的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扩展配置中的ap_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。
三、⾼⼿进阶
英⽂好的话推荐看(免费版本code.tutsplus/),虽然要付费(年付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 "
"; 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);
}
有个调试技术的博客总结的挺全⾯。参看下⾯。
博客地址:
在线查看:
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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。