Autor Zpráva
Kdam
Profil *
Dobrý den, potřeboval bych poradit, zkouším experimentovat s autoload, mám takovýto kod:

load.php
function __autoload($name)
{
    $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
    
    include_once $dir . $name . ".php";
}
a index.php
i
include_once dirname(__FILE__) . "/load.php";
$a = new Class1()

No a všechny třídy mám ve složce class, ve které jsou rozdělené do složek podle namespace. Jak ten autoload upravit tak, aby nebral pouze domovskou složku, ale i složky v class..je potřeba v autoloadu řešit jmené prostory? například přidávání pomocí use...
Díky za pomoc


Zapoměl jsem dodat, že ve složce system mohou být i php soubory, nejenom složky, například tam je základní třída System.php a pak složky s názvy podle namespace
ShiraNai7
Profil
Kdam:
například přidávání pomocí use...
Ne.

Jak ten autoload upravit tak, aby nebral pouze domovskou složku, ale i složky v class.
To nechápu.
Kdam
Profil *
no mám v kořenovém adresáři složku system ta obsahuje složky které se jmenují podle namespace a dále také php soubory no a já potřebuju aby to nahrávalo nejen ty php soubory v system, ale i php soubory které jsou v těch složkách
Tori
Profil
Kdam:
Autoloading může fungovat několika různými způsoby:
* všechny třídy jsou ve stejné složce, nejjednodušší
* cesta k souboru je obsažena v názvu třídy: třída Controllers_Main bude v Controllers/Main.php, dtto s namespaces: Controllers\Main (stačí vám str_replace, ale při přesunu třídy do jiné složky by se musela třída/NS přejmenovat)
* statická mapa názvů tříd a jejich umístění (napevno napsané asoc. pole; musíte ho ručně měnit při každém přidání/přesunu třídy, ale cesta je nezávislá na názvu třídy/NS)
* kombinace předchozích dvou - u většiny tříd můžete cestu k souboru odvodit z názvu/NS a výjimky máte napevno uložené.
* robot loader - podobné jako předchozí, ale statickou mapu si vytvoří sám loader - projde rekurzivně složku s třídami a zjistí, co jednotlivé soubory obsahují. Pokud nenajde třídu v mapě, přegeneruje mapu. (z uvedených variant je nejtěžší ho napsat, ale pak už se nemusíte starat naprosto o nic) - používá se např. v Nette
Kdam
Profil *
A nemá tady někdo nějaký ozkoušený skript? ideálně nějaký, se kterým se bude jednoduše pracovat. na internetu jsem něco málo našel, ale některý mi nefungovali a na ten v Nette jsem taky koukal a ten asi se mi nepovede vyjmout a používat ho u mě...
Majkl578
Profil
Kdam:
A nemá tady někdo nějaký ozkoušený skript?
Tori ti uvedla odkaz na RobotLoader z Nette Frameworku. Ten je kvalitní i ozkoušený.

Dále existuje jakýsi standard PSR-0, který vlastně jen standardizuje to, co už psala Tori - automatické a logické mapování názvů tříd na názvy souborů. Implementace jsou různé, pro příklad uvedu Symfony\Component\ClassLoader\ClassLoader ze Symfony 2, Doctrine\Common\Classloader z Doctrine 2 Common.

Nette Framework dále pro načítání vlastních tříd používá hybrid jménem NetteLoader mezi PSR-0 a mapou (výčtem) pro třídy, které PSR-0 porušují.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: