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

Autoloader::load()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 10
nc 4
nop 1
dl 0
loc 17
rs 9.9332
c 1
b 0
f 0
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