|
- <?php
-
-
- class Import
- {
- private static $_paths = [];
- private static $_classMap = [];
- private static $_registered = false;
-
- private static $test_class_not_found = [] ;
-
-
-
- public static function using($namespace, $as = null)
- {
- if (!static::$_registered) {
- spl_autoload_register(['Import', 'load']);
- static::$_registered = true;
- }
- if (is_array($namespace)) {
- foreach ($namespace as $class => $alias) {
- if (is_int($class)) {
- static::using($alias);
- } else {
- static::using($class, $alias);
- }
- }
- return;
- }
-
- $namespace = trim($namespace, '\\');
- if (($pos = strrpos($namespace, '\\')) !== false) {
- $ns = trim(substr($namespace, 0, $pos), '\\');
- $alias = substr($namespace, $pos + 1);
- } else {
- $ns = '';
- $alias = $namespace;
- }
-
- if ($alias === '*') {
- static::$_paths[$ns] = true;
- } else {
- static::$_classMap[$as ? : $alias] = $namespace;
- }
- }
-
-
-
- public static function load($class)
- {
- if(!isset(static::$test_class_not_found[$class]))
- static::$test_class_not_found[$class] = 0 ;
-
- static::$test_class_not_found[$class] ++ ;
-
- if(static::$test_class_not_found[$class] > 30) {
- throw new \yii\base\ErrorException('Class not found : '.$class) ;
- }
-
- if (empty(static::$_paths) && empty(static::$_classMap)) {
- return;
- }
- if (($pos = strrpos($class, '\\')) !== false) {
- $alias = substr($class, $pos + 1);
- } else {
- $alias = $class;
- }
- if (isset(static::$_classMap[$alias])) {
- return class_alias(static::$_classMap[$alias], $class);
- } else {
- foreach (array_keys(static::$_paths) as $path) {
- if (class_exists(rtrim($path . '\\' . $alias, '\\'))) {
- return class_alias(rtrim($path . '\\' . $alias, '\\'), $class);
- }
- }
- }
- }
- }
|