写代码需要站在巨人的肩膀上,将主要精力集中在自己所需要实现的业务上面,避免反复搭建基础服务,重复造轮子。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框架并不小。
由于我本人水平有限,技术欠精,所思所写难免有所纰漏。这两个目标是本人学习之初为自己定的目标,现在大体上是实现了,因此我打算将自己的这部分经验分享出去,也帮助更多的朋友实现这两个目标,同时也希望获得大家的及时反馈,大家的反馈是我成长的最大的动力!
原文地址:https://www.cnblogs.com/minirice/p/digyii-readme.html