Yii源码阅读笔记(一)
今天开始阅读yii2的源码,想深入了解一下yii框架的工作原理,同时学习一下优秀的编码规范和风格。在此记录一下阅读中的小心得。
每个框架都有一个入口文件,首先从入口文件开始,yii2的入口文件位于web目录的index.php,用于启动web应用和配置一些路径参数。
index.php——
// comment out the following two lines when deployed to production defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); $config = require(__DIR__ . '/../config/web.php'); (new yii\web\Application($config))->run();
第2行和第3行采用短路语句的形式来(“or”可替换为“||”)定义当前的运行模式和环境,如果已经定义了Yii_DEBUG, 则or后面的语句将不会执行。如果定义了 YII_DEBUG , 那么表示当前为调试状态,应用在运行过程中,会有一些调试信息的输出。 在抛出异常时,也会有一个详细的调用栈的显示。默认情况下, YII_DEBUG 应该为ture 。 但在开发过程中,最好按上面写的那样,定义为 true 这样便于查找和分析错误。
如果定义了 YII_ENV ,那么就是指定了当前应用的运行环境。 上面的代码显示应用将运行于 dev 环境。默认情况下, YII_ENV 为 prod 表示产品环境。
这些环境只是一个名称,具体的意义和环境内容要看环境的定义。 dev prod 是Yii安装后默认的两个环境,分别表示开发环境和最终的产品环境。 此外还有一个 test 环境,表示测试环境。
环境与模式的作用不同。环境在代码中主要是影响配置文件。 YII_ENV 的 dev prod test 三种环境, 会分别使 YII_ENV_DEV YII_ENV_PROD YII_ENV_TEST 的值为 true 。 这样,在应用的配置中,特别是在相同的一个配置文件中,可以对不同环境作出不同的配置。
第5行的require引入了 vendor 下面的 autoload.php ,__DIR__为当前脚本的路径,等价于dirname(__FILE__)。
第6行引入了 vendor 下面的 yiisoft/yii2/Yii.php ,这是Yii的工具类文件。 引入了这个类文件后,才能使用Yii的提供的各种工具, 才有 Yii::createObject() Yii::$app 之类的东东可以使用。
第8行用于引入配置文件下的web.php配置文件;
最后,以$config为参数实例化了Application类,并调用run()方法启动应用。
接下来看vendor 下面的 yiisoft/yii2/Yii.php
vendor/yiisoft/yii2/Yii.php——
require(__DIR__ . '/BaseYii.php'); class Yii extends \yii\BaseYii { } spl_autoload_register(['Yii', 'autoload'], true, true); Yii::$classMap = require(__DIR__ . '/classes.php'); Yii::$container = new yii\di\Container();
根据注释理解这是一个框架的辅助类,可以编写自己的方法来定制YiiBase的功能。
Yii源码阅读笔记(一)的更多相关文章
- Yii源码阅读笔记(八)
前面阅读了Yii2的两个基本类Object和Component,了解了Yii的三个重要概念属性.事件.行为,下面开始阅读Event类,Event类是所有事件类的基类: <?php /** * @ ...
- Yii源码阅读笔记(三)
接着上次的继续阅读BaseYii.php vendor/yiisoft/yii2/BaseYii.php—— public static function getRootAlias($alias)// ...
- Yii源码阅读笔记(二)
接下来阅读BaseYii.php vendor/yiisoft/yii2/BaseYii.php—— namespace yii; use yii\base\InvalidConfigExceptio ...
- Yii源码阅读笔记(三十五)
Container,用于动态地创建.注入依赖单元,映射依赖关系等功能,减少了许多代码量,降低代码耦合程度,提高项目的可维护性. namespace yii\di; use ReflectionClas ...
- Yii源码阅读笔记(三十四)
Instance类, 表示依赖注入容器或服务定位器中对某一个对象的引用 namespace yii\di; use Yii; use yii\base\InvalidConfigException; ...
- Yii源码阅读笔记(三十三)
ServiceLocator,服务定位类,用于yii2中的依赖注入,通过以ID为索引的方式缓存服务或则组件的实例来定位服务或者组件: namespace yii\di; use Yii; use Cl ...
- Yii源码阅读笔记(三十二)
web/Application类的注释,继承base/Application类,针对web应用的一些处理: namespace yii\web; use Yii; use yii\base\Inval ...
- Yii源码阅读笔记(三十一)
Widget类中开始,获取视图对象,获取widget ID,渲染视图,获取路径方法注释: private $_id; /** * Returns the ID of the widget. * 返回插 ...
- Yii源码阅读笔记(三十)
Widget类是所有小部件的基类,开始,结束和渲染小部件内容的方法的注释: namespace yii\base; use Yii; use ReflectionClass; /** * Widget ...
随机推荐
- ***阿里云linux 下怎么配置虚拟主机
最近有个问题,本人在阿里云买了linux服务器,用wordpress做了一个博客网站www.bravetiger.cn,现在想加一个电商系统进去,假设二级域名为:shop.bravetiger.cn, ...
- EAS使用中FineUI的配置
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...
- 惊鸿一瞥(Glimpse)——开发之时即可掌控ASP.NET应用的性能
今天要推荐的东西不是一篇文章,而是我实际使用的武器之一--用于ASP.NET应用性能诊断的大杀器.我的武器库中的武器之前已经介绍过Hangfire了,接下来我会不断和大家分享我使用的一些函数库和工具. ...
- Codeforces Round #313 (Div. 2) A. Currency System in Geraldion
A. Currency System in Geraldion Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/co ...
- eclipse下提交job时报错mapred.JobClient: No job jar file set. User classes may not be found.
错误信息: 11/10/14 13:52:07 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. A ...
- SU Demos-02Filtering-02Subfilt
巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑.这种滤波器最先由英国工程师斯替芬·巴特沃斯(Stephen Butterworth)在1930年发表在英国<无线电工程>期刊的一篇论文中提 ...
- 解决Fiddler无法抓到手机的会话包
解决Fiddler无法抓到手机的会话包 使用Fiddler抓手机的会话包涉及多个方面,所以容易出现无法抓取包的情况.遇到这类问题,需要按照以下顺序进行检查和排除. (1)在Fiddler中设置 ...
- BZOJ2610 : [Poi2003]Monkeys
考虑离线,将删边操作倒过来变成加边,等价于询问每个点什么时候与1连通 使用并查集维护,每次合并时如果有一边是1所在连通块,就把另一边的所有点的答案更新 #include<cstdio> # ...
- c++ string 结束符‘\000’
昨天输出string类型时总是出错,发现输出到文件的一行里多了^@,输出到console却看不到,debug发现,string类型中多了\000,这主要由于我想要用\0截掉字符串最后一位,所以把字符串 ...
- POJ 2117 (割点+连通分量)
题目链接: http://poj.org/problem?id=2117 题目大意:在一个非连通图中,求一个切除图中任意一个割点方案,使得图中连通分量数最大. 解题思路: 一个大陷阱,m可以等于0,这 ...