yii 框架简析

date: 2017-11-21 10:50:00
title: yii 框架简析

因为工作原因需要重拾 yii 框架, 而之前一直使用的 hyperframework -- 公司技术团队内部开发的框架, 需要什么服务, 直接往框架上添加即可. hyperframework 底层是服务容器, 需要添加新的服务很简单, 这个在我之前的 blog hyperframework WebClient 源码解读 / 用 yii 框架 10 分钟开发 blog 系统? 都有提到, 不熟悉的同学可以移步一览. 所以思路上需要做一点改变: yii 已经封装好了很多常用服务, 开箱即用.

PS: 这篇博客的英文版标题是 get_yii.md, 纪念一下我在 github 上加入的第一个开源组织以及开源项目 iiYii/getyii. 一晃三年过去了, 在此对开源作者表达诚挚敬意!

之前也提到过, 这样的重型框架之所以入门比较困难, 很大一部分原因是功能太多, 导致难以分清主次和记忆. 这里记忆不是死记硬背, 而是知识的内化, 不过知识的内化说起来更难以理解, 倒不如说是想要达到知识随用随取信手拈来的境界, 你起码得记得吧. 当时也提到一些方法, 这篇 blog 会进行完善并实践.

简析 yiii 框架的方法(类似的重型框架都可以采用这个思路):

  • 生命周期
  • 核心架构 & 模块划分
  • 脑图/笔记 等工具
  • 实践, 比如开发 blog 系统

生命周期

通过生命周期来 解读源码/定位问题 是非常非常重要的手段. 鸟哥 在他的博客中, 无论是源码分析, 还是问题解决, 多次实践, 这里摘录 思考能力何其重要.. 中的一段话:

没有, 好吧, 如果说一定要有, 那就是:vim + grep + “大胆推论,小心验证”, 我知道一个c写的可执行文件, 是从main开始的, 我知道对于mod_php来说, 开始点必然在apache将控制权交给它的那一刻开始, 有了这些, 就可以使用vim徜徉在海一样的代码中, 而不会迷路. 有了这些, 不就足够了么?

yii 框架的生命周期, 虽然在应用上会做如下分类:

  • web 应用: 一次 http 请求的生命周期, 抽象一点就是 request + response
  • console 应用: 一次脚本的执行过程.

但是其实是统一的, 都是对应程序的输入与输出(input/output), 只是在 http 请求这里, 使用 request/response 来表示, 而在后台脚本这里, 使用 argument/option 表示输入, 脚本中直接 echo/print 表示输出

  • php cli life cycle: 仔细看这张图, 在执行的过程中, 也有 request 的概念
php cli life cycle
  • 官方供图 - yii request life cycle: 很明显的 request / response
运行进制

核心架构 & 模块划分

  • 官方供图: application structure
image

这张图里, 最核心的其实是: 应用主体, 其他部分, 都是通过应用主体来协调调度, 甚至你可以认为, yii = application(container) + component(service)

我制作的 百度脑图: get_yii, 带上了标识表示我理解的重要性.

  • entry: 入口脚本, 这是一切的开端, 从这里开始可以对框架有一个「全景式」的张开
  • application(container): 框架的核心, 容器机制已经是现代化框架的代名词了
  • component(service): 框架提供的功能(服务), 由 application 来协调调度, 所有可见的功能, 大家经常提的 MVC, 其实也属于这里
  • extension(vendor): 扩展(依赖), 虽然需要和框架配合, 可能也需要改造成 component, 但是它的核心理念其实是 依赖管理, 从而 站在巨人的肩膀上
  • concept: 框架需要涵盖的设计理念, 这部分的内容希望大家可以好好阅读, 因为 可能你一直徜徉在业务的海洋, 却没有花时间思考技术本身

工具 & 实践

熟悉我的同学可能都知道, 我比较喜欢用 思维导图, 平时也喜欢 记笔记, 部分观点在之前也提到过, 这里再赘述一下:

  • 关于记忆: 知识的内化是需要过程的, 这个过程可以简单理解为 记忆, 很多时候, 其实 记着了, 也就渐渐掌握了. 所以有时候大牛会跟你说, 下去多看看就行了. 为什么, 因为多看看就是一个重复的过程, 一回生二回熟. 当然, 也可以用点文雅的词 -- 潜移默化
  • 笔记: 好记性不如烂笔头, github 的 gist 来记代码片段, 各种笔记应用, 这个就不用多言了吧. 提醒一点, 注意清理, 不然最后都是杂草了
  • 思维导图: 开始使用思维导图的契机其实蛮简单, 这玩意可以帮助记忆, 当时还特地买了一套书来看这个. 其实并没有必要特地去研究这个, 我一般这样的场景下使用 -- 一个事物太复杂, 我需要花时间来整理清楚它

当然还有一些其他的工具, 主要遵循 一图胜千言 的理念, 比如流程图, 时序图, 这就看场景了, 不过使用频率没那么高.

关于实践, 我们前任 CTO 的建议我会一直铭记:

多读源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,565评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,355评论 6 343
  • 一篇20岁时候写的文章,如今忽忽十年过去,增删一些句子,希望可以有所不同。——题记 眼眶里盈满睡意,却一再的苏醒。...
    纤纤阅读 837评论 0 2
  • Sometimes 不能在代码里把任务网址写死,需要动态传参给 spider ,以适应任务需求 首先得定义一个 _...
    Traim阅读 2,597评论 0 1