Loader

Jedná se o modul Autoloaderu, který pracuje takto:

  • Určí zda je pro daný název třídy relevantní pro daný loader. Pokud ne, vrátí false a Autoloader dá příležitost dalšímu zaregistrovanému loaderu.
  • Pokud je pro daný název třídy relevantní, pak sestaví cestu ke skriptu, který třídu obsahuje. To by měl provést co nejrychleji (s co nejnižší režií). Zjištěnou cestu pak vrátí jako návratovou hodnotu. Hlavní třída systému Autoloader se postará o zbytek procesu nahrání třídy. To již není věcí jednotlivého Loaderu - jeho úkolem je pouze vrátit cestu ke skriptu třídy.

Každý loader musí dědit od třídy Jet\Autoloader_Loader.

Příklad loaderu (loader knihovny Jet - samotného frameworku, tedy skript ~/library/Jet/JetAutoloader.php):

use Jet\Autoloader_Loader;
use 
Jet\SysConf_Path;

return new class extends 
Autoloader_Loader
{
    public function 
getAutoloaderName() : string
    
{
        return 
'library/Jet';
    }
    
    public function 
getScriptPathstring $class_name ): bool|string
    
{
        
        if(!
str_starts_with($class_name'Jet\\')) {
            return 
false;
        }
        
        return 
SysConf_Path::getLibrary() . $this->classNameToPath$class_name );
        
    }
};

Existují dva základní druhy autoloaderů

Jsou dva základní druhý autoloaderů:

  • Autoloadery knihoven
    Každá knihovna (v adresáři ~/library/) může mít svůj autoloader ve skriptu JetAutoloader.php - jak je uvedeno v příkladu výše. Libovolnou knihovnu lze tedy snadno doplnit o její vlastní loader, který bude perfektně kooperovat se systémem.

    (Cesty a názvy lze samozřejmě změnit systémovou konfigurací.)

  • Autoloadery aplikace
    V adresáři ~/application/Autoloaders/ (i zde platí možnost změnit vše pomocí systémové konfigurace) naleznete dva základní autoloadery pro nahrávání tříd vaší aplikace. Je tu autoloader obecných tříd aplikace (ApplicationClasses.php) a tříd aplikačních modulů (ApplicationModules.php).

    Vám samozřejmě nic nebrání vytvořit si další autoloader přesně dle vašich potřeb.

Pro všechny tyto základní autoloadery platí, že v každém skriptu je vždy jeden loader, který je vracen jako instance anonymní třídy.

Vytvoření a registrace (libovolného) autoloaderu

Obecný systém autoloaderu sice nabízí metody pro nahrání autoloaderů knihoven a autoloaderů aplikačních tříd, ale platí, že je možné snadno vytvořit a registrovat jakýkoliv autoloader.

Jedinou podmínkou je, že autoloader musí dědit od abstraktní třídy Jet\Autoloader_Loader a implementovat metody getAutoloaderName (definuje název autoloaderu používaný například pro generování chybových hlášení) a getScriptPath (generuje název skriptu dané třídy - pokud je autoloader pro danou situaci relevantní).

Obecně lze autoloader vytvořit zaregistrovat takto:

Autoloader::register( new class extends Autoloader_Loader {
    public const 
CLASSES_MAP = [
        
'MyNamespace\\Class1' => 'path/to/class1.php',
        
'MyNamespace\\Class2' => 'path/to/class2.php',
        
'MyNamespace\\Class3' => 'path/to/class3.php',
    ];
    
    public function 
getAutoloaderName(): string
    
{
        return 
'my/SuperAutoloader';
    }
    
    public function 
getScriptPathstring $class_name ): bool|string
    
{
        return static::
CLASSES_MAP[$class_name] ?? false;
    }

});
Předchozí kapitola
Autoloader
Další kapitola
Keš / Cache