admin管理员组

文章数量:1794759

php自学提升进阶路线

php自学提升进阶路线

php自学提升进阶路线

为了自己对php的系统全面深入的掌握,我通过个人经验,以及搜索网上高手经验,汇总了一份php自我学习路线规划,包括实战演练、学习建议、高手进阶、常见问题和测试总结五块。算是一个系统的学习计划和目标吧。避免盲目学习,对提高有所指引。希望自我加压,通过努力修炼达到高手水平。天道酬勤,自我勉励!此路线仅适合我本人。部分摘自博客,参看:【原创】PHP程序员的技术成长规划 blog.csdn/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,半年後你會覺得自己進步許多总结:自学非常重要,实际项目经验也很重要。不要以为计算机基础不重要,学习计算机基础对学习编程语言非常有用。只要对自己狠一点,多下功夫,没有攻不破的东西。

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。-------------------------------------------------------------

三、高手进阶

英文好的话推荐看 tutsplus/ (免费版本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. 我的所有问题都问完了,你有什么问题问我没有?-------------------------------------------------------------

五、调试总结 我目前常用的调试方法:

php代码调试:echo 和echo "<pre>"; print_r(method); 

脚本js就是alert方式,或console.log。console.log 原先是 Firefox 的“专利”,严格说是安装了 Firebugs 之后的 Firefox 所独有的调试“绝招”。 这一招,IE8 学会了,不过用起来比 Firebugs 麻烦,只有在开启调试窗口(F12)的时候,console.log 才能出结果,不然就报错。

css调试就是弄成色块加上边框等。或者在页面写上css后,调通后再转移到css文件。

日志方式用于无法打印时。php是解释执行弱类型语言,不像java静态强类型语言,可以设置断点一路执行跟踪。php如果没有日志工具,就是黑盒难以排查bug。

请参考: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);}

有个调试技术的博客总结的挺全面。参看下面。博客地址:blog.csdn/heiyeshuwu/article/details/5684307在线查看:down.51cto/data/155822

PHP调试技术手册发布(1.0.0 pdf)目录

1 内置API输出调试1.1 基本调试API1.1.1 echo (print):1.1.2 printf1.1.3 print_r、var_dump(var_export)、debug_zval_dump1.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 Vim3.1.2 Zend Studio3.1.3 Eclipse3.1.4 NetBeans3.2 IDE调试3.2.1 Zend Studio + Zend Debugger3.2.2 Eclipse (PDT) + Xdebug3.2.3 Vim + Xdebug + DBGp4 PHP 性能调试技术4.1 基本时间占用监测4.2 使用  Xdebug 进行性能分析4.2.1 安装配置:4.3 APD(Advanced PHP Debugger)4.3.1 安装配置4.3.2 使用APD4.4 使用Xhprof 进行性能分析4.4.1 Xhprof  的优点:5 PHP单元测试技术5.1 PHPUnit

 

本文标签: 进阶路线PHP