| Autor | Zpráva | ||
|---|---|---|---|
| jan99 Profil * |
#1 · Zasláno: 28. 6. 2012, 19:22:01 · Upravil/a: jan99
Ahoj, nevadi kdyz pridam napr. array s konfiguracnimi udaji rovnou do globals?
To same pokud pridam do $GLOBALS rovnou array s LANGUAGE texty pro celou sajtnu? Zajima me jestli to nebude mit napr spatny vliv na vykon PHP (language texty byvaji obsahlejsi). $GLOBALS['_conf_array'] = array('a','b','c');
function g(){
var_dump($GLOBALS['_conf']);
}
g();Videl jsem ze nektere systemy pouzivaji pro globalni data Konstanty (define('KONST','ahoj <br/> hoj')), ale takove reseni se mi nelibí... Taktez se mi nechce neustale psat do kazde funkce global $_conf_array; aby tam ta array byla videt. Diky za nazory a pripominky * var_dump($GLOBALS['_conf_array']); |
||
| AM_ Profil |
pokud nechceš použít statické třídy, tak je tohle asi nejlepší řešení.
Se statickou třídou by to mohlo vypadat nějak takto: <?php
class Lang
{
private $data = array('hw'=>'Hello, World', 'welcome'=>'Welcome to my site.');
public static function text($id)
{
return $this->data[$id];
}
}
//viditelne globalne
echo Lang::text('welcome');Samozřejmě je to zjednodušené, v praxi se hodí např. mít jazyková data v souboru odděleném od této třídy a načíst je dle zvoleného jazyka apod... Já mám řešení přes třídy raději, ale je to spíš otázka vkusu, na výkon by to nemělo mít zásadní vliv. |
||
| jan99 Profil * |
#3 · Zasláno: 2. 7. 2012, 00:50:06 · Upravil/a: jan99
AM_: to neni spatny napad s tema tridama. Diky za tip
premyslim jak to toho nacpat parse_ini_file(); funkci tak aby se ta array s nastavenim nacitala z toho. Kdyz to dam rovnou do te staticke fukce tak se to parse_ini_file() bude volat porad a porad znovu. A do konstruktoru to dat nemuzu protoze je to staticka funkce a nebude to fungovat.. (?) |
||
| Keeehi Profil |
#4 · Zasláno: 2. 7. 2012, 11:08:51
jan99:
Udělat Lang s návrhem podobným singletonu. Ten konstruktor má a staticky se volá. |
||
| Ugo Profil |
<?php
class Lang {
private static $data = array();
public static function load($array) {
self::$data = (array)$array;
}
public static function loadFile($file) {
if(file_exists($file)) {
self::load(parse_ini_file($file));
} else {
throw new Exception("Zadany soubor neexistuje");
}
}
public static function text($id) {
if(isset(self::$data[$id])) {
return self::$data[$id];
} else {
return $id;
}
}
}
// tst
define('LANGUAGES',__DIR__.'/res/languages');
try {
Lang::loadFile(LANGUAGES.'/en.lang');
} catch(exception $e) {
echo $e->getMessage();
}
echo Lang::text('pes');edit.. eh sem to zkopiroval a nechal i s tou chybou :D je to ošklive, polofunkční, ale nástřel jak bych to řešil já. jinak GLOBALS samozřejmě špatné neni $lang = new lang() v základnim prostoru je přece taky globals, výkonostně je asi nejlepší to globals, pak statická třída a někde daleko za tim instance, osobně jazyky řešim takovym hybridem abych moh mít zároveň víc načtenejch jazyků, ale pro případ jednoho sem nemusel nic řešit. + tady mam nějaké chybové stavy, to je podle mě blbost, soubor neexistuje? - vytvořim, neni záznam? .. vytvořim. přidám metodu save() a mam hotovou i administraci ;) |
||
| jan99 Profil * |
#6 · Zasláno: 2. 7. 2012, 18:29:24
Ano, nejlepší to bude asi fakt do těch GLOBALS.
PS: proč potřebuješ mít načteno několik jazyků najednou? Podle mě je to zbytečné, když uživatel vidí jen jeden jazyk který má zrovna zvolený |
||
|
Časová prodleva: 13 let
|
|||
0