《深入解剖Yii2框架》前言
写代码需要站在巨人的肩膀上,将主要精力集中在自己所需要实现的业务上面,避免反复搭建基础服务,重复造轮子。PHP框架就是这样一些巨人的“肩膀”,使得我们“站”得更高,“看”得更远。像PHP本身有着不断迭代和升级的历史一样,PHP框架也有着自己的发展历史,从简单到复杂,从低级到高级,从面向过程到面向对象。
目前,比较流行的是以Laravel5.2+,Yii2,ZendFramework2.0,Symfony2等为代表的新一代框架。这一些框架,普遍和自己的“过去”有着很大的“决裂”,基本都吸收了当下最为流行的编码风格和设计模式,完成了“华丽转身”。而这些流行的框架,彼此相互学习,在设计上有非常多的相似之处,比如,在类的自动加载上,使用依赖注入容器等等。
在这些优秀的框架中,Yii2是比较突出的。Yii2的前身是Yii1,但是是重新写的,二者并不兼容。Yii2官方的定义是高性能,基于组件的PHP框架,其特性是快速、安全、专业,适合构建各种规模的web项目。但个人认为,Yii2还具有其他一些突出的优点:
1.简洁——Yii2编程哲学就是简洁优雅,代码非常简单易懂,就像其谐音“易”一样,易学易用;其其代码注释非常规范,IDE定位效果非常好。而且社区活跃,官方论坛有中文区,国内论坛人气也挺不错,知识获取容易。
2.清晰——相比其他的框架,Yii2设计的整个脉络非常清晰,有其鲜明的特点,容易梳理和掌握。比如,Yii2的基石是Object和Component(组件),对类的功能进行扩展,提出了属性(property),行为(behavior)和事件(event)三个基本概念,适用于框架的任何部分,一个类功能再复杂,都能这三个概念演化而成;再比如对类的提供上,统一用了依赖注入容器(DI Container)和服务定位器(Service Locater)来提供,避免用new的方式产生内存浪费和强耦合。像上面提出的几处,都是Yii2的基础,其他的各个重要的部分(比如请求,响应,数据库,缓存,Restful等)都是在这基石上像盖楼房一样搭起来。内在的逻辑链条是非常清楚的,因此通过掌握这些基础概念和用法,你就摸清了整个大厦的轮廓。因此对学习者来说,不仅容易上手,也很容易走进框架内部,吸收其精华思想为我所用,从知其然到知其所以然,从一个菜鸟高效的变成一个高手。
3.开放——Yii开发团队一直关注业内Web开发的最新技术,很注意吸收当下最为流行的技术。 可以说,近年来Web开发中最潮的技术都可以在Yii2身上或多或少的看到影子。比如类的自动加载,PRS规范,依赖注入,ActiveRecord等。一个跟得上潮流和趋势的框架,才具有生命力和吸引力,学习起来才有意思、有意义。
4.流水线风格——Yii2框架的组件,都有其生命周期,这和现实世界真实发生的事情是对应的上的,生命周期分为重要的几个“时间节点”,每个“时间节点”上会设定一个事件(Event),用户可以在这些事件上绑定事件处理器(Event Handler),程序流转到这一步便会触发,从而实现自己的意图。这其实是一种流水线作业的方式,Yii2的几乎各个部分都是这样实现的,各道“工序”都可以方便的增加,修改或者删除,从而实现你想要的定制化。
大体上说,一个PHP的框架至少要涉及到这些部分:请求,响应,路由,数据库,缓存,日志,异常,Session/Cookie, 认证(Authentication),授权(Authorization ),安全(Security),Http协议,队列,Restful API,测试等模块。一个框架是研究如何去组织代码的,并不能提高PHP本身的运行效率,甚至会牺牲PHP的运行效率来提高开发的效率。在实际项目中,这是笔划算的买卖。框架做不了语言本身都完成不了的事情,这是毋容置疑的,比如对数据库的处理的DAO层,本身是对PHP PDO功能的进一步封装。本人想帮助大家了解,那些非常优美的设计,是怎么从PHP手册里躺着的函数、方法一步步的变过来的。
《深入解剖Yii2框架》是一个系列。我采用“解剖”作为标题,是因为我采用的方式主要是对框架源代码进行逐行解读,从根本上理解框架运行机制;并且结合设计模式/设计原则对其进行分析,升华大家对编写代码的认识,然后结合个人的一些开发经验和教训谈谈在实战中的应用,使得大家从理论从新落地,获得实际的提升。
通过针对Yii2框架的分享,我希望能为大家达到以下两个目标:
第一,从内涵上说——通过对Yii2的解剖,深入理解这个框架的编程思想,掌握各个重要组成部分的构成和用法
第二,从外延上说——通过对这款典型框架的解剖,能举一反三的了解其他PHP框架甚至整个服务端所涉及的重要知识点和涉及内容
能“举一反三”,是“解剖”的另外一层含义——麻雀虽小五脏俱全嘛,更何况Yii2框架并不小。
由于我本人水平有限,技术欠精,所思所写难免有所纰漏。这两个目标是本人学习之初为自己定的目标,现在大体上是实现了,因此我打算将自己的这部分经验分享出去,也帮助更多的朋友实现这两个目标,同时也希望获得大家的及时反馈,大家的反馈是我成长的最大的动力!
《深入解剖Yii2框架》前言的更多相关文章
- Python数据分析与挖掘所需的Pandas常用知识
Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series ...
- 10个步骤教你如何安装Anaconda安装,Python数据分析入门必看
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:小白 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...
- Python数据分析——numpy基础简介
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:基因学苑 NumPy(Numerical Python的简称)是高性 ...
- 《谁说菜鸟不会数据分析》高清PDF全彩版|百度网盘免费下载|Python数据分析
<谁说菜鸟不会数据分析>高清PDF全彩版|百度网盘免费下载|Python数据分析 提取码:p7uo 内容简介 <谁说菜鸟不会数据分析(全彩)>内容简介:很多人看到数据分析就望而 ...
- 《Python金融大数据分析》高清PDF版|百度网盘免费下载|Python数据分析
<Python金融大数据分析>高清PDF版|百度网盘免费下载|Python数据分析 提取码:mfku 内容简介 唯一一本详细讲解使用Python分析处理金融大数据的专业图书:金融应用开发领 ...
- [Python数据分析]新股破板买入,赚钱几率如何?
这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试.作者对于python是零基础,需要从头学起. 在写本文时,作者也没有完成这个小分析目标,边学边做吧. == ...
- 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例
基于上两篇文章的工作 [Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 已经正确地实现 ...
- 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化
继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...
- 【搬砖】【Python数据分析】Pycharm中plot绘图不能显示出来
最近在看<Python数据分析>这本书,而自己写代码一直用的是Pycharm,在练习的时候就碰到了plot()绘图不能显示出来的问题.网上翻了一下找到知乎上一篇回答,试了一下好像不行,而且 ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
随机推荐
- 自学Python4.2 迭代器、生成器
迭代器.生成器一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么, 因为人们很少在迭代途中往后退.另外 ...
- 微信小程序——微信支付
这个讲起来也就比较麻烦一点,因为需要的不仅仅是咱们代码上的技术,嘿嘿! 先整理一下思路.如果想做微信支付: 1.现有一个公司账户(非个人账户),并且实名认证过的. 2.微信号 必须开通微信支付功能. ...
- 小白的Python之路 day1 字符编码
字符编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Interc ...
- SUID、SGID、Sticky BIT
添加SUID: chmod 4755 可执行文件名 或 chmod u+s 可执行文件名 删除SUID: chmod 755 可执行文件名 或 chmod u-s 可执行文件名 [root@local ...
- java.lang.StringBuilder和java.lang.StringBuffer (JDK1.8)
这两个类都是继承自AbstractStringBuilder,AbstractStringBuilder有两个成员属性 char[] value; int count; 前者用于存储字符串,后者用于统 ...
- 记一次生产环境Nginx日志骤增的问题排查过程
摘要:众所周知,Nginx是目前最流行的Web Server之一,也广泛应用于负载均衡.反向代理等服务,但使用过程中可能因为对Nginx工作原理.变量含义理解错误,或是参数配置不当导致Nginx工作异 ...
- 什么是副作用(Side Effect)
副作用(Side Effect)是指函数或者表达式的行为依赖于外部世界.具体可参照Wiki上的定义,副作用是指 1)函数或者表达式修改了它的SCOPE之外的状态 2)函数或者表达式除了返回语句外还与外 ...
- 探索C++对象模型
只说C++对象模型在内存中如何分配这是不现实的,所以这里选择VS 2013作为调试环境具体探讨object在内存中分配情况.目录给出了具体要探讨的所有模型,正文分标题依次讨论.水平有限,如有错误之处请 ...
- xml文件解析(使用解析器)
一.Xml解析,解析xml并封装到list中的javabean中 OM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在 ...
- spring boot入门 -- 介绍和第一个例子
"越来越多的企业选择使用spring boot 开发系统,spring boot牛在什么地方?难不难学?心动不如行动,让我们一起开始学习吧!" 使用Spring boot ,可以轻 ...