yii框架设计学习笔记(一)

阅读提示:

本文章适合和我一样的菜鸟们,事先声明受于见识原因,其中偏驳和遗漏及错误,大家可以置之一笑,但是也欢迎大家指正错误,各位大神大侠

yii是什么?
yii是一款由国人开发的高性能php框架.
yii的构成.
yii其主要思想由桌面开发的事件驱动及组件化开发为基础的框架。
yii的作用.
yii拥有完备的拓展库,以及其自生的特性,使得其非常插拔式的开发方式非常容易被人用来拓展程序,同时其引入了mvc的思想作为其上层开发,便于其他人的开发。
yii高性能的原因
因为其组件化的结构,只有当类真正使用的时候才会被实例化,提高了性能,并且他将cache作为他本身的一个底层特性,大大提高了性能。

分析一个框架,必须找到原始入口,如同win的winmain,这里我随便用yiic初始化一个应用,找到入口文件

yii在这个文件中加载了配置文件,和他的底层框架入口文件Yii.php.

然后又在其中包含一个yiibase.php类,有人会将这个说成是yiibase的一个封装,是一个别名,其实不是这样的,在源码中已经说明了这是一个客户类,是让我们针对自己的项目调整,实现我们个性化,这就是一个适配器模式的典型应用了。

回到入口文件,yii调用了一个静态函数,createWebApplication,裹挟了参数文件.

这个函数中又调用了createApplication,但是将WebApplication作为了一个参数,同时我们发现了一个命令行的程序创建函数,他们都是调用的一个函数,接着我们发现他们分别调用了自己的类,这里又分开了,这里我们已经发现了一种设计模式,工厂模式的应用。

进入WebApplication类,我的第一反应就是找到构造函数,但是文件中却没有,那到那里去了?这里yii使用了php的一个特性,就是当类没有构造函数的时候,他会去调用其父类的构造函数,和c++的面向对象一样,但是不同的是c++还会自己生成一个,不同的是php在有构造函数的时候就不会调用其父类的构造函数,节省了很多的事情,不想c++一样,一层一层向上调,非要穷究其源,同时这里还使用了一个类自动加载机制,不过是直接设置,不知道为什么要这样做。

  回到application,他是一个继承cmodule的类,他首先将yii的setApplication将自己设置为当前应用,然后加载配置文件,同时判定当前的应用目录是否为默认目录,不是就加载自定义目录,接着将给application,webroot,ext三个目录设置别名,接着调用preinit,本文件中没有,在父类中发现是一个空函数,说明这是一个自定义函数,接着加载了yii自身的异常函数,和错误函数,这个函数的名字很有趣,Initsystemhandler,接着便是注册核心组件,这里需要返回上级看具体要加载哪些组件,至于为什么,因为我们实际上是在webapplication函数中,当然调用它的自身重载函数,回到这个webapplication这个类中,他这里有调用了。

时间: 2024-10-21 09:55:57

yii框架设计学习笔记(一)的相关文章

node.js框架StrongLoop学习笔记(一)

node.js框架StrongLoop学习笔记(一) 本人在用node.js做手机后台,查找框架发现StrongLoop挺适合,可是却发现没有中文教程,于是在自己学习时,做一下笔记,以方便其他像我一样的人参考(本人的英语水平非常差,只能一点点试着做,并记录下来,如果大家发现问题,请通知我好更正,谢谢了!).所有操作都是在CentOS7-x64,Node.js 0.12.2下完成的. nodejs框架StrongLoop学习笔记一 安装StrongLoop 创建项目 安装数据库驱动 配置数据库连接

Mina框架的学习笔记——Android客户端的实现

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中.目前正在使用 MINA 的软件包括有:Apache Directory Project.Asyn

《AxureRP原型设计学习笔记》之骨头班门弄斧篇

懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 青岛) ---- 前言 ---- AxureRP中的RP:Rapid Prototyping,快速原型. 这是产品经理的神奇,作为开发来搞这个东西,有点班门弄斧. 最近边查边搞了一个丑陋的app原型,一点心得,简计于此. mac下的AxureRP装完之后,默认打开是不显示程序界面的.别跟骨头似的以为没装好,重新下载安装.新建或打开即可. 这是软件界面: ---- 控件 ---- 不建议初学者首先下

jfinal框架教程-学习笔记

JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所有优势的同时再拥有 ruby.python.php 等动态语言的开发效率!为您节约更多时间,去陪恋人.家人和朋友!(鼓掌!~~) JFinal 有如下主要特点: ?  MVC 架构,设计精巧,使用简单 ?  遵循 COC 原则,零配置,无 xml ?  独创 Db + Record 模式,灵活便利 ? 

分页框架pager-taglib学习笔记

下面的笔记来自于孔浩老师的视频教程和我自己的开发实践. 使用Pager-taglib可以帮助我们快速开发分页处理. pager-taglib-2.0.war这是我们第1次直观地认识jar包.直接放到tomcat的webapp目录下面,就可以启动项目,查看帮助文档.说明:拷贝完之后,可以改一个名字,方便我们写访问的路径.使用的步骤:(1)将相应包拷贝到lib目录(pager-taglib.jar),另外一个是源码包,貌似可以不拷贝,我还没试过.(2)在jsp页面引入相应的分页标签库.引入标签 pr

领域驱动设计学习笔记

最近学习了领域驱动设计,基本上熟悉了领域驱动的一些基本术语以及一些分析的方法,并结合了实际的开发架构.基本的概念是通过<领域驱动设计:软件核心复杂性应对之道>这本书来进行学习的,里面详细讲解了领域驱动的一些基本概念以及领域驱动的多个设计模式,如果想对领域驱动进行深入学习的话,这本书是一个不错的基础. 有了基本的概念之后,为了与实际的开发进行结合,我还阅读了<领域驱动设计C# 2008实现问题.设计.解决方案>.这本书作者通过实际的项目来展开讲解的,前面几章根据领域驱动的概念设计了领

系统分析与设计学习笔记(一)

为什么要学习这门课程? "拥有一把锤子未必能成为建筑师". 这门课程学习的是面向对象分析和设计的核心技能的重要工具.对于使用面向对象技术和语言来,创建设计良好.健壮且可维护的软件来说,这门课程所授予的技能是基本要求.对于创建对象     系统来说,了解面向对象语言例如JAVA或者C++是必要的,但不是首先要做的.了解"对象思想"才是关键所在. 学习的内容:UML与对象思想 UML只是图形表示法,并不能代表OOA/D,也不是方法. 学习"对象思想"

【MUI框架】学习笔记整理 Day 1

MUI 框架之 [原生UI] (1)accordion(折叠面板) 由二级列表演化而来 1 <ul class="mui-table-view"> 2 <li class="mui-table-view-cell mui-collapse"> 3 <a class="mui-navigate-right" href="#"></a> 4 <div class="m

Android Mina框架的学习笔记

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中.目前正在使用 MINA 的软件包括有:Apache Directory Project.Asyn