Yii源码阅读笔记(一)

时间:2022-04-15 03:57:09

今天开始阅读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的功能。