《深入解剖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 ...
随机推荐
- BeautifulSoup 抓取网站url
1 # -*- coding:utf-8 -*- 2 import urlparse 3 import urllib2 4 from bs4 import BeautifulSoup 5 6 url ...
- 【深度学习系列】用PaddlePaddle和Tensorflow实现GoogLeNet InceptionV2/V3/V4
上一篇文章我们引出了GoogLeNet InceptionV1的网络结构,这篇文章中我们会详细讲到Inception V2/V3/V4的发展历程以及它们的网络结构和亮点. GoogLeNet Ince ...
- CentOS 7 学习(一) 配置LAMP和Nginx
CentOS 7 学习(一) 配置LAMP和Nginx CentOS是RedHat Linux企业版的代码编译版本,属于比较通用的服务器Linux版本,据说Ubuntu Server更通用,呵呵,不过 ...
- 《C++程序设计语言(英文第四版)》【PDF】下载
<C++程序设计语言(英文第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382177 内容简介 本书是C++领域经典的参 ...
- 安装eclipse时跳转到网页提示JRE Missing
可能的原因:jdk与安装的eclipse不兼容,可能64位机器安装了32位的jdk,导致64位的eclipse不能识别.
- xamarin android checkbox自定义样式
xamarin android checkbox自定义样式 在drawable文件在新建checkbox_bg.xml文件 <?xml version="1.0" encod ...
- php-fpm开机启动
php-fpm开机自动启动脚本 网上有各种版本的php-fpm开机自动启动脚本, 其实你编译后源目录已经生成自动脚本.不用做任何修改即用. cp {php-5.3.x-source-dir}/sapi ...
- .NET使用DAO.NET实体类模型操作数据库
一.新建项目 打开vs2017,新建一个项目,命名为orm1 二.新建数据库 打开 SqlServer数据库,新建数据库 orm1,并新建表 student . 三.新建 ADO.NET 实体数据模型 ...
- Centos6.8防火墙配置
1.基本操作 # 查看防火墙状态 service iptables status # 停止防火墙 service iptables stop # 启动防火墙 service iptables star ...
- 滚动条大于120px时,判断pc端的情况下,导航条固定定位
//滚动条大于120px时,判断pc端的情况下,导航条固定定位 $(window).scroll(function(){ var viewWidth=$(document).width() var ...