文档章节

php自学提升进阶路线

stone_
 stone_
发布于 2016/07/11 18:16
字数 3585
阅读 280
收藏 10

一、实战演练

熟悉语法&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。


-------------------------------------------------------------

三、高手进阶


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

-------------------------------------------------------------

五、调试总结

我目前常用的调试方法:

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);
}


有个调试技术的博客总结的挺全面。参看下面。
博客地址: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

本文转载自:http://www.cnblogs.com/wellsoho/p/4949082.html

stone_
粉丝 20
博文 221
码字总数 163611
作品 0
洛阳
程序员
私信 提问
PHP程序员必备的3大编程自学资源,有这些资源学编程如鱼得水!

无论自学,还是报培训班,学会PHP编程的正常速度是4—6个月。 所谓的学会PHP是可以胜任PHP正式工作岗位,成功成为PHP战斗士。 之前w3cschool已经分享过PHP自学、入门、进阶的方法,今天主要就...

W3Cschool
2018/03/01
0
0
技术生涯迷茫,望指引

先介绍一下基本情况: 22岁,已工作。在公司里干了几个项目,其中一个php项目,项目成色还可以,网站上流动资金也已过亿,项目中作为二号开发程序员。 熟悉的领域:web 熟悉的语言:前端 html...

znddzxx1122
2014/12/23
4.9K
28
自学编程需要注意什么?

自学编程,我有经验。 第一,选题。就是选择学习的主要语言。这个环节最主要的其实并不是到底哪种语言,而是选择一门语言,就坚持学下去,不要朝秦暮楚,左右摇摆,选择恐惧症犯了。这样,我...

兮子大大
2017/09/20
70
0
linux运维进阶之路

运维学习需要分为四个阶段,linux初级入门-àlinux中级进阶-àlinux高级提升,和资深方向细化。   第一阶段:初级入门   初级阶段需要把linux学习路线搞清楚,任何学习都是循序渐进的,所...

俊先生
2017/04/21
0
0
Java怎么学?2018最新Java学习路线,技术要求与项目推荐详解!

关注小编吧!! 回顾2017年,java发展的程度超乎了我们的想象,对技术的要求也越来越高,从原先的前端,后端的分布,到现在企业要求的全栈,对于个人能力的要求是逐步提高的,那我们现在究竟...

qq_41781067
2018/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
刚刚
0
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
0
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
2
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
2
0
nginx-rtmp-module的缺陷分析(二)

nginx-rtmp-module使用指令push和pull来relay媒体流数据,以便分布式部署服务。 当nginx-rtmp-module作为边缘服务器(一般不会向边缘服务器推流)时,使用pull从源服务器获取媒体流数据,俗称...

YoungSagit
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部