|
<?php
namespace daswork;
class Loader
{
// protected static $instance = [];
// 类名映射
protected static $map = [];
// 命名空间别名
protected static $namespaceAilas = [];
// // 自动加载的文件
// private static $autoloadFiles = [];
// 命名空间与路径映射
private static $namespaces = [];
// 保存已加载的类
private static $classMaps = [];
// // 自动加载
// public static function autoload($class)
// {
// // 检测命名空间别名
// if (!empty(self::$namespaces)) {
// $namespace = dirname($class);
// if (isset(self::$namespaces[$namespace])) {
// $original = self::$namespaces[$namespace] . '\\' . basename($class);
// if (class_exists($original)) {
// return class_alias($original, $class, false);
// }
// }
// }
// if ($file = self::findFile($class)) {
// // Win环境严格区分大小写
// if (IS_WIN && pathinfo($file, PATHINFO_FILENAME) != pathinfo(realpath($file), PATHINFO_FILENAME)) {
// return false;
// }
// __include_file($file);
// return true;
// }
// }
private static function autoload($class)
{
if (in_array($class, self::$classMaps)) {
return true;
}
if ($file = self::findFile($class)) {
// Win环境严格区分大小写
if (IS_WIN && pathinfo($file, PATHINFO_FILENAME) != pathinfo(realpath($file), PATHINFO_FILENAME)) {
return false;
}
__include_file($file);
self::$classMaps[] = $class;
return true;
}
}
public static function findFile($class)
{
$namespace = \dirname($class);
// 有命名空间映射的
if (isset(self::$namespaces[$namespace])) {
$file = self::$namespaces[$namespace] . basename($class) . EXT;
return $file;
}
// var_dump(substr($class,strpos($class, '\\') + 1));
$model = substr($class,0,strpos($class, '\\'));
// var_dump($model);
if ($model=='app') {
$file = APP_PATH . DS. str_replace('\\', DS, substr($class,strpos($class, '\\') + 1)) . EXT;
// var_dump($file);
return $file;
}
}
// 注册系统自动加载
public static function register($autoload = '')
{
spl_autoload_register($autoload ?: 'daswork\\Loader::autoload', true, true);
self::$namespaces = [
'daswork' => CORE_PATH,
'daswork\lib' => CORE_PATH . 'lib' . DS
];
}
}
/**
* 作用范围隔离
*
* @param $file
* @return mixed
*/
function __include_file($file)
{
return include $file;
}
function __require_file($file)
{
return require $file;
}
|