Autor | Zpráva | ||
---|---|---|---|
Kdam Profil * |
#1 · Zasláno: 3. 6. 2012, 11:29:19 · Upravil/a: Kdam
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"; } 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 |
#2 · Zasláno: 3. 6. 2012, 11:32:28
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 * |
#3 · Zasláno: 3. 6. 2012, 11:52:08
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 |
#4 · Zasláno: 3. 6. 2012, 17:15:58
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 * |
#5 · Zasláno: 3. 6. 2012, 20:44:01
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 |
#6 · Zasláno: 4. 6. 2012, 03:34:36
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í. |
||
Časová prodleva: 12 let
|
0