Passed
Branch main (166306)
by Nelson
03:35
created

Autoloader   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
dl 0
loc 48
rs 10
c 1
b 0
f 0
wmc 6

3 Methods

Rating   Name   Duplication   Size   Complexity  
A addNamespace() 0 5 1
A register() 0 3 1
A load() 0 17 4
1
<?php
2
3
namespace App;
4
5
/**
6
 * Autoloader PSR-4
7
 * Carga automáticamente las clases de la aplicación
8
 */
9
class Autoloader
10
{
11
    /**
12
     * Array de namespaces mapeados a directorios
13
     */
14
    private static $prefixes = [];
15
16
    /**
17
     * Registra el autoloader
18
     */
19
    public static function register()
20
    {
21
        spl_autoload_register([self::class, 'load']);
22
    }
23
24
    /**
25
     * Añade un namespace y su directorio base
26
     * @param string $prefix Namespace (ej: 'App\\Libs')
27
     * @param string $base_dir Directorio base (ej: '/path/to/app/libs')
28
     */
29
    public static function addNamespace($prefix, $base_dir)
30
    {
31
        $prefix = trim($prefix, '\\') . '\\';
32
        $base_dir = rtrim($base_dir, '/\\') . DIRECTORY_SEPARATOR;
33
        self::$prefixes[$prefix] = $base_dir;
34
    }
35
36
    /**
37
     * Carga la clase
38
     * @param string $class Nombre completo de la clase con namespace
39
     */
40
    public static function load($class)
41
    {
42
        foreach (self::$prefixes as $prefix => $base_dir) {
43
            if (strpos($class, $prefix) === 0) {
44
                $relative_class = substr($class, strlen($prefix));
45
                $file = $base_dir . str_replace('\\', DIRECTORY_SEPARATOR, $relative_class) . '.php';
46
47
                if (file_exists($file)) {
48
                    require $file;
49
                    return true;
50
                } else {
51
                    error_log("Autoloader: No se encontró el archivo $file para la clase $class");
52
                }
53
            }
54
        }
55
56
        return false;
57
    }
58
}
59