<?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);