Autor Zpráva
Santa Klaus
Profil *
Chtěl bych vytvořit statickou třídu pro konfiguraci, pokud to jde, abych k tomu mohl přistupovat ve stylu:
C::A::login;  // login admina
C::A::psw; // heslo admina
C::A::email; // email admina
C::M::host; // mysql host
C::M::user; // mysql user
C::M::psq; // mysql pasword
C::M:db; // mysql database
Dá se to udělat?
Santa Klaus
Profil *
oprava: vnořené konstanty statické třídy
Tori
Profil
Santa Klaus:
Konstanty mohou mít pouze skalární hodnoty, takže přesně takhle to nepůjde. Magická metoda, která by se spustila při volání nedefinované konstanty, taky není. Takže zbývají proměnné, metody, nebo třeba Config::get('Admin.login').
Santa Klaus
Profil *
Tori:
Najjednodušší řešení pro mě je vytvořit samostatné konfigurační třídy s konstantami, takže to dám odděleně. Nebude to teda zabalené, ale roztřídit to na samostatné třídy mi pomůže vnést pořádek do položek konfigurace.
Radek9
Profil
Santa Klaus:
Pro třídění můžeš použít namespace. Ty se zanořovat dají.
Santa Klaus
Profil *
Radek9:
Můžeš dát ukázku?
Alphard
Profil
Jak to má ve výsledku vypadat? Ručně budete psát několik tříd v několika souborech a pak s tím nějak pracovat? To nebude moc pohodlné.
Zůstal bych u vyzkoušených metod ve stylu Neonu apod.
Santa Klaus
Profil *
Alphard:
Navrhuješ tedy použití proměnných? Tomu jsem se právě s vděčností vyhnul, protože bych musel ve všech funkcích dát globální proměnné typu config. Nakonec mi příjde lepší nedělat to strukturovaně, je to přehlednější tak jak jsem to udělal.

Dávám sem ukázky kódu využívající třídy s konstantami:

include_once C::PATH.'/include/options.inc.php';
include_once C::PATH.'/include/init.inc.php';
include_once C::PATH.'/include/include_classes.php';
include(C::PATH.'/languages/'.ADMIN::LOGINANG.'/'.ADMIN::LOGINANG.'.php');
include(C::PATH.'/languages/'.ADMIN::LOGINANG.'/'.ADMIN::LOGINANG.'_.php');
include(C::PATH.'/languages/'.ADMIN::LOGINANG.'/'.ADMIN::LOGINANG.'a.php');
define('ADM_DIR',A::ADMINDIR);

if(O::SEARCH_PHOTO && $acs) {
    $photol=ShowPic(not_empty($files,$id));
    $link = C::URL.'/'.A::ADMINDIR.'/index.php?do=vp&ds=1&id='.$id;
    if(O::SEARCH_PHOTO_AUTORESIZE) {
        $photo_wh=PhotoSize(C::PATH.'/members/uploads/'.not_empty($files,$id));
        $width = ($photo_wh[0] >= $photo_wh[1]) ? ' width="'.O::SEARCH_PHOTO_WIDTH.'"' : ' height="'.O::SEARCH_PHOTO_WIDTH.'"';
        } else $width=' width="'.O::SEARCH_PHOTO_WIDTH.'"';
        $pictures='<a href="'.$link.'" target="_blank"><img src="'.$photol.'" border="'.C_IMG_BRDR.'"'.$width.' hspace="0" vspace="0" align="middle"></a>';
    } else $pictures = '';
Alphard
Profil
Santa Klaus:
Navrhuješ tedy použití proměnných?
Myšlenka s Neonem mířala mnohem výš, jeho možnosti jsou nesrovnatelné.

Používání statických tříd (přesněji vlastností a metod, snad si rozumíme) je obdoba globálních proměnných, viz např. opuštění vševědoucí statické třídy Environment a přechod k DI u Nette, ale i u jiných frameworků.
Pokud vás trápilo používání globálních věcí, nepomohl jste si. Jestli šlo jen o ušetření si psaní global $var;, můžete si konfigureaci nechat vracet statickou metodou.
Santa Klaus
Profil *
Alphard:
A jak je na tom Neon z hlediska výkonu? Po zavedení statických tříd, jsem zpozoroval rychlejší reakce (zdá se mi to citelně rychlejší, ale měřit zde čas v mikrosekundách není moc přesné protože se to pohybuje). Zdá se mi nepatrné zlepšení oproti předchozímu stavu (předtím doba zpracování se pochybovala mezi 0.21 až 0.4 při opakovaném reloadu stránky, se to postupně navyšovalo. Nyní to drží na 0.21, někdy to klesne i na 0.13 nebo stoupne na 0.3. Takže se zdá že je to až o čtvrtinu rychlejší než předtím nebo jen mírně, jak kdy). Právě u toho Neonu si myslím že by to zpomalilo díky zvýšené složitosti struktury dat.
Alphard
Profil
Nemyslím, že by to mělo vliv, ale vždycky můžete konfiguraci cachovat.
Santa Klaus
Profil *
Alphard:
a to se dělá jak?

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: