Autor Zpráva
H13
Profil
Ahoj potřeboval bych poradit,

mám soubor, kde je proměnným přiřazen jejich název ve vybraném jazyce...

$head = Array (
'title' => 'Jméno stránky',
'content_type' => 'text/html, charset=iso-8859-2', ...atd

Na jakékoliv stránce k nim přistupuji takto:

<title><?php echo $head['title'] ?></title>

Potřeboval bych vědět jak se tyto proměnné dají vložit do jednotlivých tříd, např.:

class Mysql {
#variables ...
#constructors ...

#methods
function connect () {

try {
$this->link_id = @mysql_connect ($this->host, $this->user, $this->pswd);
if (!$this->link_id)
{
throw new Exception ("Nelze se připojit k MySQL")...atd


a zde bych chtěl nahradit text "Nelze se připojit k MySQL" proměnnou podle konkrétního jazyka...

díky moc
Anonymní
Profil *
napis si funkciu ci metodu ktora dany text nacita napr taky kratky priklad:
class Translator
{
public function getTranslation($text)
{
// nacitat subor
// potom uz zalezi len na spracovani napr $text by mohol kluc v poli
// napr $textovePole['mysql_chyba1']='nelze se pripojit k mysql';
return $textovePole[$text];
}
}// end Translator
$prekladac=new Translator;
...
throw new Exception ($prekladac->getTranslation('mysql_chyba1'));
Anonymní
Profil *
a tak ma napadlo ze pri vytvarani noveho objektu by si mohol pridat parameter a to jazyk napr new Translator('cz')
ten by potom nacital subor s danou priponou
H13
Profil
díky, vyzkouším
H13
Profil
no mám nějakej problém s

$prekladac->getTranslation('mysql_chyba1')

Když vložím "$prekladac=new Translator;" do třídy Mysql, pak je vše v pořádku, ale vkládat to do všech tříd, který vytvořím, by asi nebylo dobrý, takže by mě zajímalo, jak to vložit do skriptu (spíše kam) a jak se odkazovat z jedné třídy (Mysql) na třídu (Translator) aniž bych v třídě translátor vytvářel "$prekladac=new Translator;"
Anonymní
Profil *
tak to sprav ako staticku metodu, pokial sa v metode nepouziva $this tak neni problem
H13
Profil
právě to je problém, protože ve třídě translate mám tuto metodu (nastavení jazyka):

function setTranslate($lang{
$this->lang = $lang;

a pak mám metodu (vrácení textu vybraného jazyka):

function getTranslate($text){
$this->text = $text;
$this->lang_path = "./languages/" . $this->lang . ".php"; (výběr souboru jazyka s pomocí metody setT...)
include ($this->lang_path);
return $lang_txt[$this->text];

takže když se ve tříde Mysql odkážu:
Translate::getTranslate('mysql_connect1')

pak to samozřejmě hodí chybu, protože není nastaven setTranslate
Anonymní
Profil *
tak najjednoduchsie asi bude:
class Translate {
private static $lang;
public static function setLang($lang)
{ self::$lang=$lang; }
public static function getTranslate($text)
{
// vrati ten text
$langpath= './languages/'.self::$lang.'.php';
include($langpath);
return $lang_txt[$text];
}
pak si nekde na zacatku nastavis lang, nebo rovno v triede (private static $lang = 'cz') a potom ked budes chciet zmenit tak Translate::setLang('eng');

pak by to uz malo ist
H13
Profil
ještě se zeptám, pojede to pod php 4.x
Anonymní
Profil *
aha cece, preco si to nepovedal skor? :)
ja robim v php5, takze je to navrhnute na to, moc skusenosti s oop4 nemam, ale mozes skusit ci to pojde ked zmazes slova ktore urcuju viditelnost, tj private, public... predpokladam ze self a static boli uz v php, nevim nemam to otestovane
H13
Profil
jo za to se omlouvám, zkouším to i php 4, to jsem měl hned na začátku říct, ve 4 mi to nejede, myslím, že to bude tím, že 4 má problémy se self:: (samozřejmě taky private a public)

takže bych teď potřeboval vědět, jak obejít v php 4 self::
Anonymní
Profil *
no self je odkaz na aktualnu triedu cize Translate::
H13
Profil
no přesněji jsou to následující chyby:

Undefined class name 'self'

self::...;

nebo

parse error, expecting `'

Translate::$lang=$lang;
H13
Profil
Ještě se zeptám, co kdybych změní tuto funkci:

function getTranslate($text){
$this->text = $text;
$this->lang_path = "./languages/" . $this->lang . ".php"; (výběr souboru jazyka s pomocí metody setT...)
include ($this->lang_path);
return $lang_txt[$this->text];

na:

function getTranslate($text){
global $lng
$this->text = $text;
$this->lang_path = "./languages/" . $lng. ".php"; (výběr souboru jazyka s pomocí metody setT...)
include ($this->lang_path);
return $lang_txt[$this->text];

a na začátku stránky prostě vložím
$lng ='cz'

to znamená, že na začátku každé stránky definuji globální proměnnou $lng na třeba 'cz' a funkce ve třídě translate nebude obsahovat nastavení jazyka (setTranslate), ale v metodě getTranslate bude používat pro výběr cesty (tedy jazyka) globální proměnnou $lng ...
Anonymní
Profil *
class Translate
{
var $lang;
function Translate($lang){
// konstruktor
$this->var = $lang;
}
function &getInstance($lang='cz')
{
return new Translate($lang);
}
function getTranslation($text)
{
// tu je mozne pouzit $this a nacitat var $lang
return $pole[$text];
}
} // end translate

vkladanie textu by malo byt potom asi nasledovne Translate::getInstance()->getTranslation($text); nieco na sposob singletonu, keby sme chceli aby to bol singleton tak vo fnci getInstance() definujeme static $instance, a v nej by sa ulozil ten objekt, ovsem to su len dohady, toto by malo fungovat... dufam :) s oop4 moc skusenosti nemam
Anonymní
Profil *
aj stou globalnou je to ovsem mozne, ale ja nerad nieco davam na globalny priestor lebo tam to nemas iste ci ti to niekto neprepise.. pokial to chces risknut tak kludne to sprav cez global ;)
Anonymní
Profil *
juj a mam tam hrubku
// konstruktor
$this->lang = $lang;
H13
Profil
aj stou globalnou je to ovsem mozne, ale ja nerad nieco davam na globalny priestor lebo tam to nemas iste ci ti to niekto neprepise.. pokial to chces risknut tak kludne to sprav cez global ;)

Na raději bych se tomu vyhnul
H13
Profil
Translate::getInstance()->getTranslation($text)

tady mi to zase hází parse error...
Anonymní
Profil *
ked to pouzijes napr v hadzani vynimky?
$text = Translate::getInstance()->getTranslation('mysql_connect1');
throw new Exception($text);
a co konkretne mu tam vadi?
H13
Profil
no ono ve 4 nefunguji ani vyjimky, takže to zkouším v die ( ... ) a tam to hází parse error, no abych pravdu řekl, nejraději bych se na php 4 ..., jenže si prostě verzi vybrat nemůžu...
Anonymní
Profil *
nj, skoda ze nemam nahodene php4 a nemam ako to vyskusat... nejako sa stym pohraj, pozri nake komentare v php.net
Anonymní
Profil *
$text = Translate::getInstance()->getTranslation('mysql_connect1');

tohle prostě hází parse error, jak kdyby mu vadilo ->
Anonymní
Profil *
a co to rozdelit...
$obj = Translate::getInstance();
$text = $obj->getTranslation('mysql_connect1');
H13
Profil
Missing argument 1 for translate()

no, vidím to tak, že to napíšu v php5 (to jede v pohodě) a najdu hosting s php5, protože, když vyřeším toto, pak určitě příjde další zádrhel, takže pro OOP rovnou využiju PHP5

jinak díky moc za rady
Toto téma je uzamčeno. Odpověď nelze zaslat.

0