php mvc框架实战教程了解基本MVC的运行机制和为什么这么做对照设定学习成长目标php mvc框架
2022-01-25
根据众多PHP/LNMP程序员的发展轨迹,结合个人经验,抽象出很多程序员对未来的迷茫,尤其是技术学习的盲目和恐慌,简要梳理了PHP程序员各个阶段的技术需求. , 帮助许多 PHP 程序进行比较以设定学习和成长目标。本文根据目前的主流技术做了一个基本的梳理。整体是基于PHP程序员基础不是很扎实的假设,所有的设置都非常具体和清晰,可能会让人觉得不舒服。请理解,它仅代表家庭用语。(未来的技术变化不在讨论范围内)
第一阶段:基础阶段(初级 PHP 程序员)
重点:精通LNMP(核心是安装配置的基本操作)
目标:能够完成基本的LNMP系统安装,简单的配置和维护;能够做一个简单系统的基本PHP开发;能够支持PHP中型系统中PHP功能模块的开发。
时间:完成这个阶段的时间因人而异。有的长到半年一年,有的慢慢长了两三年。
1.:
基本命令、操作、启动、基本服务配置(包括rpm安装文件、各种服务配置等);可以编写简单的脚本和awk/sed脚本命令等。
2.:
能够安装和配置+php,了解基本的核心配置选项,了解//等基本配置,目标是让+顺利运行。
3.:
可以自己搭建,了解基本的配置选项;了解和之间的区别,了解和两个引擎的不同配置选项;了解两种引擎的基本区别以及上述选择的区别;能够手工编译建库并配置编码等,运行正常稳定;核心主题是能够构建一个可运行的数据库。
4.PHP:
基本语法数组、字符串、数据库、XML、GD/图像处理等;熟悉与操作相关的各种api(//PDO),懂得解决各种编码问题;了解熟悉的 PHP 框架(、、、Yii、Yaf 等);了解基本MVC的运行机制以及为什么要这样做,对不同PHP框架之间的区别有所了解;能够快速学习一个MVC框架。能够了解开发项目中的文件目录组织,具备基本良好的代码结构和风格,能够完成小型系统和中型系统的模块开发。
5.前端:
如果时间允许,可以适当学习HTML/CSS/JS等相关知识,了解什么web标准,div+css的web/wap页面模式,以及区别;了解一些基本的前端和JS框架(等);了解一些基本的编程知识;(这个项目不是必须的,如果你有时间,稍微了解一下也没关系,但不建议作为重点,除非你有强烈的兴趣)
6.系统设计:
能够完成小型系统的基础设计,包括简单的数据库设计,能够完成基础的:浏览器->+PHP->数据库架构设计开发工作;能够支持每天几十万到几百万流量网站的开发和维护工作
第 2 阶段:改进阶段(中级 PHP 程序员)
重点:提高LNMP的技能,能够对LNMP有更全面、更熟练的应用。
目标:能够随时随地搭建LNMP环境,快速完成日常配置;能够追踪和解决开发和在线环境中遇到的大部分问题;能够独立承担中型系统的框架和开发;能够承担一定的大型系统中型模块的开发;
1. :
在第一阶段的基础上,可以流畅地使用脚本完成很多自动化任务;awk/sed/perl 也很好用,可以完成大量的文本处理和数据统计;基本上你可以安装大多数非特殊程序。(包括各种库、包、第三方依赖等,如////SVN等);了解基本服务,了解如何查看性能指标数据,了解以下基本问题跟踪。
2. :
在第一阶段的基础上,了解更复杂的配置;包括多核配置,,, /tcp_* 配置,了解超时等相关配置和性能影响;知道除了web,还可以承接代理服务器、反向静态服务器等配置;了解基本的配置调优;知道如何配置权限,编译扩展;知道基本的工作原理(/机制,),知道为什么性能优于性能等;
3. /:
在第一阶段的基础上,在开发方面,掌握很多小技巧,包括常规SQL优化(by/by/rand优化等);除了可以构建之外,还可以冷热备份数据,知道影响/性能的配置选项(如///ize/等),也知道这些选项配置成什么值合适的; 另外,知道一些特殊的配置选项,比如知道如何搭建主从同步环境,知道它们之间的区别;了解性能跟踪,包括/等,还可以了解索引建立和处理的基本知识;基本了解基本架构(+存储引擎),了解基本/索引存储结构及区别(聚集索引、B-tree);了解基本的事务处理机制;知道如何处理大多数异常(或知道在哪里可以找到它们)。如果条件允许,建议了解一下有代表性的数据库,顺便比较一下差异。同事可以在合适的应用场景中安全谨慎的使用,了解PHP基础和PHP开发的结合。
4. /:
在大多数中型系统中,肯定会涉及到缓存处理,所以必须了解基本的缓存;了解和应用场景的异同,能够独立安装/了解一些基本的特性和限制,比如最大值,了解PHP和它们的结合使用;了解基本工作原理和使用,了解一般数据类型,了解在什么场景下使用什么类型,了解事务等等。原理部分可以大致了解内存结构(slab机制),了解常见数据类型的底层实现存储结构(SDS/链表//)等,顺便了解一下机制比较好事务、RDB、AOF 等
5. PHP:
除了第一阶段的能力,安装配置可以自由安装PHP和各种第三方扩展的编译安装配置;了解php-fpm的大部分配置选项和含义(如//等影响性能的配置),知道/区别;在PHP方面,他已经能够精通各种基础技术,包括各种深入的PHP,包括深入理解PHP面向对象/SPL/语法层面的反射等特殊特性;阅读过至少一个常规PHP MVC框架的代码,了解PHP基础框架的内部实现机制和设计思路;在PHP开发中,熟练使用常规设计模式进行应用开发(抽象工厂/单例/观察者/命令链/策略/适配器等模式);建议开发自己的PHP MVC框架,全面放开开发,让自己深入了解MVC模式,让自己在业务项目开发中快速升级;熟悉PHP中的各种代码优化方法,熟悉大部分PHP安全问题的解决方案;熟悉PHP执行的基本机制(Zend引擎/扩展的基本工作机制);并让自己在业务项目开发中快速升级;熟悉PHP中的各种代码优化方法,熟悉大部分PHP安全问题的解决方案;熟悉PHP执行的基本机制(Zend引擎/扩展的基本工作机制);并让自己在业务项目开发中快速升级;熟悉PHP中的各种代码优化方法,熟悉大部分PHP安全问题的解决方案;熟悉PHP执行的基本机制(Zend引擎/扩展的基本工作机制);
6. C/C++:
开始涉足某种C/C++语言,能够编写基本的C/C++代码,熟悉基本的C/C++语法(指针、数组操作、字符串、常规标准API)和数据结构(链表、树、 hash, ) 有一定的熟悉度;对以下C语言开发概念有基本的了解,能编写简单的文件,能使用简单的GCC/GDB程序编译和简单的调试;对基本的网络编程有一个大致的了解。(此项目是为更高水平打下基础)
7. 前端:
在第一阶段的基础上,熟悉基本的HTTP协议(协议代码200/300/400/500,基本的HTTP交互头);如果条件允许,可以深入编写稍微优雅的HTML+CSS+,也可以大致简单使用一些前端框架(/YUI///等);如果条件允许,可以深入学习编程,比如闭包机制、DOM处理;再深入一点,可以阅读源码进行深度学习。(本项目不侧重学习,除非对前端感兴趣)
8. 系统设计:
能够设计大部分中型系统的网站架构、数据库、基础PHP框架选型;性能测试调查处理等;能够完成网站的基本设计类似:浏览器->CDN()->+PHP->缓存->数据库结构网站的开发和维护;可支持日百万至千万流量基础网站的开发和维护
第 3 阶段:高级阶段(高级 PHP 程序员)
重点:除了基础的LNMP程序外,还可以对某个方向或领域进行深度学习。(深维度开发)
目标:除了能够完成基础的PHP业务开发外,还能够解决最深入复杂的技术问题,能够独立设计并完成中大型系统的设计开发工作;能够独立持有并深入某个技术方向,在这个比较专业。(如任一方向的深入研究、、PHP等)
1. :
除了第二阶段的能力,除了常规的操作和性能监控跟踪,还可以使用很多高级复杂的命令来完成工作(///ldd/ar等);在脚本方面,编写了更复杂的脚本(500多行),以协助完成包括备份、自动化处理、监控等在内的许多任务;awk/sed/perl等应用已经如火如荼,可以随意操作控制文本统计,分析各种复杂格式的数据;对机制有一定了解,对内核模块加载、启动错误处理等有基本的了解;同时,我也了解了一些其他相关的东西,比如NFS、磁盘管理等;
2. :
在第二阶段的基础上,已经能够非常熟练地操作,可以进行更深入的运维工作,比如监控、性能优化、复杂问题处理等;看个人兴趣,更多方面可以考虑重点研究工作原理的深入研究主要体现在开始阅读源码php mvc框架实战教程,比如具体/工作机制、内部事件处理、内存管理等.; 同时可以学习扩展的开发,可以自定义一些自己的私有扩展;对lua有一定的了解,看看能不能结合应用更好的模型;这个阶段的要求是对原理的深刻理解,
3. /:
在第二阶段的基础上,在应用方面,除了之前的基础SQL优化外,还可以完成一些复杂的操作,比如导入导出大数据,改变在线大数据的表结构,或添加或删除索引字段等高风险操作;除了安装和配置之外,已经能够处理更复杂的问题,比如排查各种问题,解决主从同步延迟问题,跨机房同步数据解决方案,高可用架构等. 所有涉及的理解;应用层,熟悉事务机制(隔离层、锁等)等核心关键技术,对触发器有一定的了解和应用,分区和其他技术;性能方面,除了第二阶段,还包括磁盘优化(SAS迁移到SSD)、服务器优化(内存、服务器配置)、其他核心性能优化选项(ze////eout等),连接池软件选型应用,深入了解show*(show /show)类的操作语句,能够完成大部分性能问题的追溯;深入熟悉备份技术,包括容灾与恢复,深入理解权、冷热备份、多IDC备份等;在原理方面,有更多的了解,比如正确的工作机制,开始阅读部分源码,比如学习主从同步(复制)技术的源码,或者学习理解某个存储引擎的源码(//)等。如果条件允许,可以参考CSV引擎开发自己的简单存储引擎来保存一些数据,增强理解;在这个过程中,如果你有兴趣,也可以考虑向DBA方向发展。层面上可以考虑,比如在少写多读的情况下启动在线应用,或者做一些在线数据分析处理操作。具体的场景可以根据工作而定,但核心是为了更好的理解区别对于场景下的应用,如果有条件或者兴趣允许,可以开始深入了解工作机制。可以参考CSV引擎开发自己的简单存储引擎来保存一些数据,增强理解;在这个过程中,如果你有兴趣,也可以考虑向DBA方向发展。层面上可以考虑,比如在少写多读的情况下启动在线应用,或者做一些在线数据分析处理操作。具体的场景可以根据工作而定,但核心是为了更好的理解区别对于场景下的应用,如果有条件或者兴趣允许,可以开始深入了解工作机制。可以参考CSV引擎开发自己的简单存储引擎来保存一些数据,增强理解;在这个过程中,如果你有兴趣,也可以考虑向DBA方向发展。层面上可以考虑,比如在少写多读的情况下启动在线应用,或者做一些在线数据分析处理操作。具体的场景可以根据工作而定,但核心是为了更好的理解区别对于场景下的应用,如果有条件或者兴趣允许,可以开始深入了解工作机制。比如在少写多读的情况下启动在线应用小程序开发,或者做一些在线数据分析和处理操作。具体的场景可以根据工作而定,但核心是为了更好的理解区别对于场景下的应用,如果有条件或者兴趣允许,可以开始深入了解工作机制。比如在少写多读的情况下启动在线应用,或者做一些在线数据分析和处理操作。具体的场景可以根据工作而定,但核心是为了更好的理解区别对于场景下的应用,如果有条件或者兴趣允许,可以开始深入了解工作机制。
4. /:
在第二阶段的基础上,可以更深入地应用和学习。因为不是特别复杂,建议阅读源码,尤其是内存管理部分,便于深入理解;部分,可以做更多复杂数据结构的应用(zset用于排序排序操作/事务处理用于保证原子性秒杀场景应用等使用操作);大部分学习应用涉及到aof等同步机制,设计了高可用的应用架构和集群;建议深入研究源码,利用第二阶段积累的知识。可以应用,特别是可以阅读核心事件管理、内存管理、内部核心数据结构等。充分学习和理解。如果兴趣允许,你可以成为一个非常专业的用户。
5. PHP:
作为基本核心技能,我们需要在第二阶段的基础上进行更深入的学习和应用。从基础代码应用的角度,可以解决PHP开发中遇到的95%的问题,了解大部分的PHP技巧;大部分PHP框架一天之内就能快速上手,了解各种主流PHP框架的优势。缺点是在项目开发中可以快速方便地进行技术选择;配置方面,除了常规二阶段会的知识外,还会了解一些比较局部的配置选项(php/),包括扩展中的一些复杂的高级配置和原理(如扩展配置中的.apc,apc) apc扩展配置中的./apc./apc.on等);对php的工作机制有了更深入的了解,包括php-fpm的工作机制(比如php-fpm在不同的配置机器下我们开始计算进程数和原理),对zend引擎(vm/gc/),阅读基础PHP内核源码(或阅读相关文章),了解PHP内部机制(基础Type//)实现的大部分核心数据结构,深入学习理解核心基础设施(zval//gc);能够进行基本的PHP扩展开发,了解一些扩展开发(/等)的中高级知识,熟悉php和/的区别以及通信交互的细节(/);除了开发 PHP 扩展,
6. C/C++:
在第二阶段的基础上,可以对C/C++语言有更深入的了解,可以完成中小型C/C++系统的开发;除了第二阶段的基本C/C++语法和数据结构,还可以学习一些特殊的数据结构(b-tree/rb-tree//lsm-tree/trie-tree等),方便特殊的工作需要;系统编程,熟悉多进程、多线程编程;一些多进程通信方式可以灵活选择通信方式(共享内存/信号量/管道等);多线程编程可以很好的解决锁冲突问题,可以开发调试多线程程序;熟悉编程,了解多进程模型/多线程模型/异步网络IO模型的区别和选择,熟悉不同异步网络IO模型(/poll//iocp等)的原理和区别,熟悉常用的异步框架(ACE /ICE////.ASIO等)和使用,有空的话有时间,也可以看看一些国内自研的库(例如);同时可以设计高并发程序架构(-/-等);了解C++后端开发中的大部分C/问题(内存管理、日志打印、高并发、前后端通信协议、服务监控),了解各个后端服务的RPC通信问题(/http/ /, 等等。); 比较熟悉使用 GCC 和 GDB 用于开发、编译和调试程序。在线程序的核心掉线后,问题可以快速追踪解决。在通用模块开发方面,
7. 前端:
深入了解HTTP协议(包括各个详细协议的特殊协议代码及其背后的原因,比如302静态文件被缓存,502是后面php挂了等等);除了之前的前端框架应用集成能力php mvc框架实战教程,前端方面如果有兴趣学习,可以深入了解。形式是可以自己开发一些类似的前端框架,或者开发一个比较琐碎的技能测试比如富文本编辑器;
8. 其他领域的语言学习:
我对基本的PHP/C/C++语言有基本的积累。建议现阶段可以尝试学习不同的编程语言,根据个人爱好,可以学习脚本语言/Ruby等,函数式编程语言可以尝试Lisp///诸如此类,静态语言可以尝试Java/,数据统计分析可以学习R语言。如果你想从不同的角度做后端业务,可以试试 Node.js 和前面提到的组合等等。. 学习不同的语言主要是为了提高自己的视野和解决问题方法的差异。比如你会明白,除了进程/线程之外,还有轻量级的协程;例如,在跨机通信场景中,解决方案非常简单;在不想选择C/C++的情况下,有类似的效率/可用等;主要是改善视力。
9. 其他专业:
在这个阶段,除了基本的LNMP技能外,还会考虑学习一些其他的领域知识。这些都是可能的,取决于个人兴趣和长期目标。目前可供选择的领域很多网站开发,如云计算(分布式存储、分布式计算、虚拟机等)、机器学习(数据挖掘、模式识别等,应用于统计、个性化推荐)、自然语言处理(中文分词等)、搜索引擎技术、图形图像、语音识别等。除了这些高级的,还有很多地方可以学工程,比如高性能系统、移动开发(/iOS)、计算机安全、嵌入式系统、硬件等。
10.系统设计:
系统设计基于第二阶段。可以应用所学的经验和技能,设计一个比较复杂的中大型系统,可以在线解决各种复杂系统的大部分问题,完成类似浏览器->CDN->负载均衡->接入层- > +PHP -> 业务缓存 -> 数据库 -> 各种复杂的后端 RPC 交互(存储后端、逻辑后端、反作弊后端、外部服务) -> 更多后端江子的复杂业务;可以支持每天数千万到数亿流量的网站的正常开发和维护。
第四阶段:架构阶段(建筑师)
ps:我暂时不讨论,下次会写一篇文章来描述和补充这部分的内容。
第五阶段:专家阶段(方向领域的专家)
ps:高大上,这块就不讨论了^_^
第六阶段:科学家阶段
ps:高大上,这块就不讨论了^_^