2012年12月26日星期三

分析phpcms v9执行过程之三


分析phpcms v9执行过程之三

继续介绍分析phpcms v9执行过程---phpcms v9执行过程之三
接下下介绍剩下的执行过程部分:
public static function creat_app() {
return self::load_sys_class('application');
}
在creat_app()中,然后调用load_sys_class();函数,参数为application字符串。
public static function load_sys_class($classname, $path = '', $initialize = 1)
{
return self::_load_class($classname, $path, $initialize);
}
在方法load_sys_class中调用方法_load_class();
private static function _load_class($classname, $path = '', $initialize = 1) {
static $classes = array();
//如果参数$oath为空,则$path=libs/classes
if (empty($path)) $path='libs'.DIRECTORY_SEPARATOR.'classes';
//$key=md5(libs/classesapplication)
$key = md5($path.$classname);
if (isset($classes[$key])) {
if (!empty($classes[$key])) {
//如果$classes[$key]存在,且有值,则返回值
return $classes[$key];
} else {
return true;
}
}
//如果文件E:\wamp\www\phpcms\phpcms\libs\classes\application.class.php存在
if (file_exists(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
//包含此文件
include PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php';
$name = $classname;
//调用静态方法self::my_path(),得到返回值
//是否有自己的扩展文件
public static function my_path($filepath) {
//athinfo() 返回一个联合数组包含有 path 的信息。包括以下的数组单元:dirname,basename 和 extension。
//$path['dirname']=E:\wamp\www\phpcms\phpcms\libs\classes\
//$path['basename']=application.class.php $path['extension']=php
$path = pathinfo($filepath);
if (file_exists($path['dirname'].DIRECTORY_SEPARATOR.'MY_'.$path['basename'])) {
return $path['dirname'].DIRECTORY_SEPARATOR.'MY_'.$path['basename'];
} else {
return false;
}
}
//如果application类被扩展,那么就包含扩展的类文件,如My_application.class.php
if ($my_path = self::my_path(PC_PATH.$path.DIRECTORY_SEPARATOR.$classname.'.class.php')) {
include $my_path;
$name = 'MY_'.$classname;
}
if ($initialize) {
//实例化类,最初实例化的是application.class.php,
$classes[$key] = new $name;
} else {
$classes[$key] = true;
}
return $classes[$key];
} else {
return false;
}
}

没有评论:

发表评论