Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Artas
Tvůrce
Avatar
Artas:6.7.2013 13:23

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
Tvůrce
Avatar
Odpovídá na Artas
Kit:6.7.2013 13:35

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
Tvůrce
Avatar
Odpovídá na Kit
Artas:6.7.2013 14:21

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
Tvůrce
Avatar
Artas:6.7.2013 15:36

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
Tvůrce
Avatar
Odpovídá na Artas
Kit:6.7.2013 15:50

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
6.7.2013 15:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Artas
Tvůrce
Avatar
Odpovídá na Kit
Artas:6.7.2013 18:50

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
6.7.2013 18:50
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Artas
Kit:6.7.2013 19:25

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
Tvůrce
Avatar
Odpovídá na Kit
Artas:6.7.2013 19:32

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
Tvůrce
Avatar
Odpovídá na Artas
Kit:6.7.2013 19:59

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
Tvůrce
Avatar
Odpovídá na Kit
Artas:6.7.2013 20:05

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

 
Nahoru Odpovědět
6.7.2013 20:05
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Artas
Kit:6.7.2013 20:08

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
Tvůrce
Avatar
Odpovídá na Kit
Artas:6.7.2013 20:13

No to asi jo. :-)

 
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.