CodeIgniter 源码解读之 CodeIgniter.php(二)

咱接上一节接着看

  1. 处理字符串编码及mbstring、iconv 函数
$charset = strtoupper(config_item('charset'));
ini_set('default_charset', $charset);

if (extension_loaded('mbstring'))
{
	define('MB_ENABLED', TRUE);
	// mbstring.internal_encoding is deprecated starting with PHP 5.6
	// and it's usage triggers E_DEPRECATED messages.
	@ini_set('mbstring.internal_encoding', $charset);
	// This is required for mb_convert_encoding() to strip invalid characters.
	// That's utilized by CI_Utf8, but it's also done for consistency with iconv.
	mb_substitute_character('none');
}
else
{
	define('MB_ENABLED', FALSE);
}

// There's an ICONV_IMPL constant, but the PHP manual says that using
// iconv's predefined constants is "strongly discouraged".
if (extension_loaded('iconv'))
{
	define('ICONV_ENABLED', TRUE);
	// iconv.internal_encoding is deprecated starting with PHP 5.6
	// and it's usage triggers E_DEPRECATED messages.
	@ini_set('iconv.internal_encoding', $charset);
}
else
{
	define('ICONV_ENABLED', FALSE);
}

if (is_php('5.6'))
{
	ini_set('php.internal_encoding', $charset);
}
  1. 加载一些函数方法(做了兼容性处理)
	require_once(BASEPATH.'core/compat/mbstring.php');
	require_once(BASEPATH.'core/compat/hash.php');
	require_once(BASEPATH.'core/compat/password.php');
	require_once(BASEPATH.'core/compat/standard.php');

接下来就是加载一些框架核心类…好无聊!!继续往下看

  1. 引入核心控制器类
# 这是控制器的核心基类,自定义的控制器类都要继承它
require_once BASEPATH.'core/Controller.php';
  1. 这里定义类一个方法和引入
	# 后面再讲
function &get_instance()
{
	return CI_Controller::get_instance();
}
# 如果存在 MY_Controller.php 则需引入,为什么是MY_...后面会讲
if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php'))
{
	require_once APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller.php';
}
// Set a mark point for benchmarking
# 这里打上类一个bm 标记,表示所有框架核心基类加载结束所用的时间
# 我们可以调用Benchmark类中的elapsed_time方法查看
# echo $BM->elapsed_time('loading_time:_base_classes_start','loading_time:_base_classes_end') . 's';
$BM->mark('loading_time:_base_classes_end');
  1. 初始化默认控制器和默认方法,然后处理默认控制器和方法不存在则输出 404 页面
	# 首先设置404为 false
	$e404 = FALSE;
	# 获取application中的 routes.php 配置的默认控制名(welcome),首字母大写
	$class = ucfirst($RTR->class);
	# 获取默认控制器的默认请求方法(index)
	$method = $RTR->method;
  1. 实例化默认控制器类并调用默认方法
# $class 为 Welcome
$CI = new $class();
# 回调 Welcome 中的 index 方法
call_user_func_array(array(&$CI, $method), $params);

后面就剩下引入一些存在的钩子,好啦,CodeIgniter.php 文件就看完啦!是不是很清晰了呢?下面我总结下CodeIgniter.php主要做了哪些工作:

  1. 引入框架核心类库、常量、方法库
  2. 用户请求的安全全局处理,就是那锅 is_php(5.4)
  3. 加载框架定义的错误、异常、结束处理类
  4. 判断了是否要引入Composer 的 autoload.php文件
  5. 实例化了默认控制器(Welcome),调用默认方法(index),输出了欢迎界面。

大家每次看到的欢迎界面就是从这个地方输出的,大家是不是感觉好神奇,更迫切的想继续往下看了呢?哈哈哈,这样一来,整个CI的初始化的主线副本任务就完成了,是不是很简单?接下来,我们接着进入支线任务哈~~

哈哈哈,莫慌,咱们继续!!!

发布了8 篇原创文章 · 获赞 0 · 访问量 168

猜你喜欢

转载自blog.csdn.net/weixin_43950095/article/details/104554468