1
<?php
declare(strict_types=1);
// 1. Registro del Autoloader personalizado que emula PSR-4
spl_autoload_register(function (string $nombreClaseCompleto): void {
echo "<p style='color:#6366f1; font-family:monospace; margin:4px 0;'>🔍 [Autoloader Activado] Buscando clase: <strong>{$nombreClaseCompleto}</strong></p>";
// Mapeo lógico: Reemplazar el prefijo "Kilopolis\\" por una carpeta virtual
$prefijo = 'Kilopolis\\';
if (str_starts_with($nombreClaseCompleto, $prefijo)) {
$nombreRelativo = substr($nombreClaseCompleto, strlen($prefijo));
$rutaArchivo = str_replace('\\', '/', $nombreRelativo) . '.php';
echo "<p style='color:#10b981; font-family:monospace; margin:4px 0 12px 15px;'>✔ Archivo mapeado según estándar PSR-4: <code>src/{$rutaArchivo}</code></p>";
}
});
// 2. Simulación de clases que normalmente estarían en archivos separados
namespace Kilopolis\Servicios
{
class GestorEnvios
{
public function despachar(string $paquete): string
{
return "📦 Paquete [{$paquete}] enviado por transportadora exprés.";
}
}
}
namespace Kilopolis\Modelos
{
class Cliente
{
public function __construct(public readonly string $nombre) {}
}
}
// 3. Código cliente que consume las clases
namespace
{
echo "<h2>Demostración de Carga Dinámica de Clases:</h2>";
// Al instanciar las clases, PHP dispara el callback registrado
$cliente = new \Kilopolis\Modelos\Cliente("Valentina Herrera");
$gestor = new \Kilopolis\Servicios\GestorEnvios();
echo "<div style='font-family:system-ui; background:#f8fafc; border:1px solid #cbd5e1; border-radius:8px; padding:15px; margin-top:15px;'>";
echo "<h4>Cliente: {$cliente->nombre}</h4>";
echo "<p>{$gestor->despachar('Laptop ThinkPad X1 Carbon')}</p>";
echo "</div>";
}
Haz clic para editar este código