为什么80%的码农都做不了架构师?>>>   

那么在浏览器中输入 localhost/bootstrap/index.php时 yii都做为我们做了一些什么咧
首先 我们来看index.php文件,这是yii应用的唯一入口
//定义yii的引导文件,里面定义了一个叫Yii的类
$yii=dirname(__FILE__).'/../yii/framework/yii.php';
//定义web应用的配置文件
$config=dirname(__FILE__).'/protected/config/main.php';
//开发模式下开启debug调试
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
//导入Yii的引导文件
require_once($yii);
//创建应用并初始化配置文件,运行应用
Yii::createWebApplication($config)->run();

那么createWebApplication方法主要是做写什么事情咧,我们去Yii的类里面看看
我们看到,Yii是调用了自身的另外一个静态方法createApplication,并且传递了配置文件参数$config
public static function createWebApplication($config=null){return self::createApplication('CWebApplication',$config);}

我们接着往下看,发现Yii在createApplication方法里面返回了一个 CWebApplication 类的实例化对象,并在构造函数时传递了配置文件参数
public static function createApplication($class,$config=null){return new $class($config);}

似乎想知道发生了什么,还得进入 CWebApplication的构造函数里面看看,那么我们去看看

public function __construct($config=null){//将创建的webapp实例赋值给Yii的静态属性$app,在整个进程中可以使用Yii::app()来使用这个应用对象,这是一个单例模式Yii::setApplication($this);......    }
我们看到,在构造函数的第一步,调用了Yii的setApplication方法,并传递了实例化出来的CWebApplication对象,我们进入Yii的这个静态方法可以看到,Yii将创建出来的app对象赋值给了Yii的私有的静态属性$_app;
public static function setApplication($app){if(self::$_app===null || $app===null)self::$_app=$app;elsethrow new CException(Yii::t('yii','Yii application can only be created once.'));}
在Yii中我们又看到了这样的公共静态方法,在app()方法中,返回了它的私有静态属性$_app也就是CWebApplication对象
public static function app(){return self::$_app;}

所以在接下来的页面的任何地方,我们都可以调用Yii::app()来访问CWebApplication对象,并且它是个单例对象。

转载于:https://my.oschina.net/lonxom/blog/168227

二、yii的入口与app应用实例(Yii::app())相关推荐

  1. 2021爱智先行者—(2)零基础APP开发实例

    [本文正在参与"2021爱智先行者-征文大赛"活动],活动链接:https://bbs.csdn.net/topics/602601454 欢迎关注 『Python小白的项目实战』 ...

  2. 阿里云使用笔记-第三篇-使用阿里云App连接实例

    一,前言 前面记录了首次登录阿里云实例,实现远程连接,SSH连接 阿里云还可以通过自己的App管理实例 这一篇介绍如何使用阿里云App连接实例 二,使用阿里云App连接实例 1)复制密钥信息 在上一篇 ...

  3. PHP 读取数据库内容并以二维数组按指定列输出实例

    最新PHP 读取数据库内容并以二维数组按指定列输出实例 以下是三零网为大家整理的最新PHP 读取数据库内容并以二维数组按指定列输出实例的文章,希望大家能够喜欢! <?php $host = &q ...

  4. Android项目实战(二十二):启动另一个APP or 重启本APP

    Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP 一.启动另一个APP 目前公司项目需求,一个主AP ...

  5. php键名相加,php二维数组相同键名相加实例

    php二维数组相同键名相加实例 导语:在php二维数组雷同键名相加,你写吗?下面的是百分网小编为大家搜集的php二维数组相同键名相加实例,希望对你会有所帮助. Array ( [uid] => ...

  6. python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例

    python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...

  7. c语言统计二维数组中数字出现次数,C语言二维数组中的查找的实例

    C语言二维数组中的查找的实例 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  8. Android常用实例——截取APP当前界面(可带图片、文字水印)

    Android常用实例--截取APP当前界面(可带图片.文字水印) 标签: android界面截图保存图片 2016-08-16 10:52 1262人阅读 评论(2) 收藏 举报  分类: Andr ...

  9. 中文错别字检查添加了二维码入口

    中文错别字检查添加了二维码入口 最近在研究了一下有特色 二维码的生成, 于是借用到了中文错别字检查页面上了, 就是下面的这幅图片,怎么样,图中的 CBZ 三个字母还是清晰可以辨认的吧? 还准备把更多的 ...

最新文章

  1. android app 内置图标icon 的标准,(目前是2019年)
  2. make太慢了,加快编译速度的方法 make -j
  3. python装饰器深度讲解_python核心知识讲解,干货!!!
  4. Python中的eval(),exec()以及其相关函数
  5. bzoj2957 奥妙重重的线段树
  6. ASP对很长的文章做分页输出
  7. Java易混小知识——equals方法和==的区别
  8. Ruby file操作cheatsheet
  9. wps文档提取关键词_Cisdem Document Reader5实用文档阅读器
  10. vector与list的接口介绍与如何使用以及区别,附代码。
  11. datetime-local 传时间戳_传世经典,此生必读——《呼兰河传》
  12. 44. Wildcard Matching (String; DP, Back-Track)
  13. 青岛发文:3年将在全市全面实施电子劳动合同和电子集体合同
  14. python逻辑型数据也叫布尔值_【python系统学习10】布尔值
  15. 【读书笔记】《谈谈方法》(笛卡尔)
  16. oracle 拼音首字母查询,ORACLE 中文列 按拼音首字母查询 升级版
  17. 基于Tomcat的MQ学习月记
  18. 解读Conflux的共识机制
  19. 《权力的游戏》蕴含的管理经
  20. AspectJ编译器织入与SpringAOP的运行期织入

热门文章

  1. 美国CISA 列出300个已遭利用漏洞,督促组织机构及时修复
  2. D-Link 修复多个硬编码密码漏洞
  3. 微软推出 Xbox 漏洞奖励计划,最高奖励2万美元
  4. 企业软件开发商 Atlassian 紧急修复不慎泄露的0day,IBM Aspera 软件或受影响
  5. iOS开发:为什么你的学习效率如此低,为什么你很迷茫?
  6. 品味ZooKeeper之Watcher机制_2
  7. 状态(State)模式
  8. 插头DP题目泛做(为了对应WYD的课件)
  9. 黑苹果 装SVN工具 cornerstone无法打开解决办法——网卡内建
  10. ORACLE PL/SQ入门