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

PHP PHP Vlastní autoloader - cachovaní seznamu tříd American English version English version

Avatar
Artas
Redaktor
Avatar
Artas:

Ahoj,
právě pracuji na vlastním autoloaderu tříd a interface v PHP. Vlastní autoloader je defacto hotový, jen bych potřeboval ukládat do souboru pole, kde klíčem je název třídy a hodnotou pak soubor, ve kterém se daná třída nachází. V jakém formátu bych to měl ukládat? JSON, XML nebo něco dalšího?

Jo a ještě bych potřeboval poradit, jestli má cenu u autoloaderu dávat nějakou obnovu cache - např. že bych do souboru uložil datum kdy byla uložena a při vlastním načítání bych testoval, zda není starší než nějaký interval a pokud ano, tak bych znova prošel všechny soubory a načetl nový seznam tříd?

Díky za vaše rady

 
Odpovědět 6.7.2013 13:23
Avatar
Kit
Redaktor
Avatar
Odpovídá na Artas
Kit:

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ší.

Nahoru Odpovědět 6.7.2013 13:35
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Artas
Redaktor
Avatar
Odpovídá na Kit
Artas:

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 :-).

 
Nahoru Odpovědět 6.7.2013 14:21
Avatar
Artas
Redaktor
Avatar
Artas:

Pokud by vás to zajímalo, tak tady to je: https://www.dropbox.com/…toloader.zip

 
Nahoru Odpovědět 6.7.2013 15:36
Avatar
Kit
Redaktor
Avatar
Odpovídá na Artas
Kit:

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.

Nahoru Odpovědět  +1 6.7.2013 15:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Artas
Redaktor
Avatar
Odpovídá na Kit
Artas:

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 :-).

 
Nahoru Odpovědět  +1 6.7.2013 18:50
Avatar
Kit
Redaktor
Avatar
Odpovídá na Artas
Kit:

Zkusil jsem si ještě variantu s použitím namespace. Je tam jen drobná úprava. Běžně však namespace nepotřebuji.

Nahoru Odpovědět 6.7.2013 19:25
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Artas
Redaktor
Avatar
Odpovídá na Kit
Artas:

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ě
 
Nahoru Odpovědět 6.7.2013 19:32
Avatar
Kit
Redaktor
Avatar
Odpovídá na Artas
Kit:

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();
Nahoru Odpovědět 6.7.2013 19:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Artas
Redaktor
Avatar
Odpovídá na Kit
Artas:

Aha, používám Windows, takže tím to bude.

 
Nahoru Odpovědět 6.7.2013 20:05
Avatar
Kit
Redaktor
Avatar
Odpovídá na Artas
Kit:

Asi bys narazil ve chvíli, kdybys to chtěl nahrát na server.

Nahoru Odpovědět 6.7.2013 20:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Artas
Redaktor
Avatar
 
Nahoru Odpovědět 6.7.2013 20:13
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.