Autor Zpráva
jan99
Profil *
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 *
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
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 *
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ý

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: