二、逐行阅读Yii2.0.43源码_Yii框架文件Yii.php

<?php

//引入同目录下的BaseYii.php文件
//BaseYii类提供了很多有用的方法
require __DIR__ . '/BaseYii.php';

/**
 * Yii继承BaseYii
 * BaseYii类提供了很多有用的方法
 */
class Yii extends \yii\BaseYii
{
}

/**
 * 注册自动加载函数
 *
 * 参数1:将给定函数Yii::autoload注册为__autolload()实现,当需要自动引入文件时,
 * 调用Yii::autoload方法
 *
 * 参数2:指示当函数无法被注册时,是否要抛出异常
 *
 * 参数3:如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。
 */
spl_autoload_register(['Yii', 'autoload'], true, true);

//类映射
Yii::$classMap = require __DIR__ . '/classes.php';

//挂载容器实例
Yii::$container = new yii\di\Container();

总结:Yii.php文件做了3件事

1.注册自动加载Yii:autoload,并设置这个将优先于composer的autoload调用

2.保存类映射

3.挂载容器实例

扩展测试

1.测试spl_autoload_register函数,第二个参数true和false的区别

<?php

class Test{

    public static function autoload($class)
    {
        var_dump($class);
    }
}

//autoload666方法不存在,抛出异常
spl_autoload_register(['Test', 'autoload666'], true,false);

//autoload666方法不存在,不抛出异常
spl_autoload_register(['Test', 'autoload666'], false,false);

2. 测试spl_autoload_register函数,第三个参数true和false的区别

<?php

class Second{

    public static function aa($class)
    {
        var_dump('aa');
    }
}

class First{
    public static function bb($class)
    {
        var_dump('bb');
    }
}

//以下方法,先输出bb,后输出aa
spl_autoload_register(['First', 'bb'], true,false);
spl_autoload_register(['Second', 'aa'], true,false);

//以下方法,先输出aa,后输出bb
spl_autoload_register(['First', 'bb'], true,false);
spl_autoload_register(['Second', 'aa'], true,true);//true设置放在调用堆栈的前面

//调用,
$result = app\Order::create();
var_dump($result);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值