Diskuze: Vlastní autoloader - cachovaní seznamu tříd

Tvůrce

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Můžeš použít funkce serialize() a unserialize(), ale i JSON je vhodný formát.
Podle mne však děláš zbytečnou práci. Stačí soubor pojmenovat stejně jako třídu a jen přidat příponu. Bude to spolehlivější a rychlejší.
Díky za radu. Ano, vím že je to celkem zbytečné, ale aspoň si na tom
procvičím php a občas se to může i hodit .
Pokud by vás to zajímalo, tak tady to je: https://www.dropbox.com/…toloader.zip
Tady máš můj autoloader:
<?php
function __autoload($class) {
include str_replace("_", "/", $class) . ".class.php";
}
Použití:
$a = new Aaa_Bbb_Cc();
// natáhne: Aaa/Bbb/Cc.class.php
To je vše.
Máš pravdu. To je teda o hodně jednodušší než to moje . Můj autoloader má jedinou
výhodu v tom, že název souboru nemusí mít vůbec nic společného s názvem
třídy, což je ale vlastně i nevýhoda, protože je pak v těch třídách
bordel
.
Zkusil jsem si ještě variantu s použitím namespace. Je tam jen drobná úprava. Běžně však namespace nepotřebuji.
Mě to tvoje funguje s namespace i bez úpravy
function __autoload($class) {
include str_replace("_", "/", $class) . ".class.php";
}
$a = new \NazevNamespace\Aaa_Bbb_Cc();
//hledá třídu Aaa_Bbb_Cc v souboru NazevNamespace/Aaa/Bbb/Cc.class.php což je asi správně
Ne tak docela. Na Windows to možná chodí, ale pod Linuxem to zlobí. Po úpravě to vypadá takto:
<?php
function __autoload($class) {
include strtr($class, "_\\", "//") . ".class.php";
}
$a=new \NazevNamespace\Aaa_Bbb_Cc();
Zobrazeno 12 zpráv z 12.