Autor | Zpráva | ||
---|---|---|---|
H13 Profil |
#1 · Zasláno: 21. 8. 2006, 17:50:25
Ahoj potřeboval bych poradit,
mám soubor, kde je proměnným přiřazen jejich název ve vybraném jazyce...
Na jakékoliv stránce k nim přistupuji takto:
Potřeboval bych vědět jak se tyto proměnné dají vložit do jednotlivých tříd, např.:
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 * |
#2 · Zasláno: 21. 8. 2006, 18:10:16
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 * |
#3 · Zasláno: 21. 8. 2006, 18:12:37
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 |
#4 · Zasláno: 21. 8. 2006, 20:57:07
díky, vyzkouším
|
||
H13 Profil |
#5 · Zasláno: 21. 8. 2006, 22:23:59
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 * |
#6 · Zasláno: 21. 8. 2006, 22:25:52
tak to sprav ako staticku metodu, pokial sa v metode nepouziva $this tak neni problem
|
||
H13 Profil |
#7 · Zasláno: 21. 8. 2006, 22:58:03 · Upravil/a: H13
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 * |
#8 · Zasláno: 21. 8. 2006, 23:37:49
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 |
#9 · Zasláno: 22. 8. 2006, 00:22:20
ještě se zeptám, pojede to pod php 4.x
|
||
Anonymní Profil * |
#10 · Zasláno: 22. 8. 2006, 00:28:43
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 |
#11 · Zasláno: 22. 8. 2006, 00:36:54 · Upravil/a: H13
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 * |
#12 · Zasláno: 22. 8. 2006, 00:54:57
no self je odkaz na aktualnu triedu cize Translate::
|
||
H13 Profil |
#13 · Zasláno: 22. 8. 2006, 01:07:24
no přesněji jsou to následující chyby:
Undefined class name 'self' self::...; nebo parse error, expecting `' Translate::$lang=$lang; |
||
H13 Profil |
#14 · Zasláno: 22. 8. 2006, 01:21:00
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 * |
#15 · Zasláno: 22. 8. 2006, 01:24:08
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 * |
#16 · Zasláno: 22. 8. 2006, 01:27:17
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 * |
#17 · Zasláno: 22. 8. 2006, 01:28:42
juj a mam tam hrubku
// konstruktor $this->lang = $lang; |
||
H13 Profil |
#18 · Zasláno: 22. 8. 2006, 11:02:02
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 |
#19 · Zasláno: 22. 8. 2006, 11:16:26
Translate::getInstance()->getTranslation($text)
tady mi to zase hází parse error... |
||
Anonymní Profil * |
#20 · Zasláno: 22. 8. 2006, 11:53:12
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 |
#21 · Zasláno: 22. 8. 2006, 13:46:40
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 * |
#22 · Zasláno: 22. 8. 2006, 13:54:45
nj, skoda ze nemam nahodene php4 a nemam ako to vyskusat... nejako sa stym pohraj, pozri nake komentare v php.net
|
||
Anonymní Profil * |
#23 · Zasláno: 22. 8. 2006, 14:09:59
$text = Translate::getInstance()->getTranslation('mysql_connect1');
tohle prostě hází parse error, jak kdyby mu vadilo -> |
||
Anonymní Profil * |
#24 · Zasláno: 22. 8. 2006, 15:08:06
a co to rozdelit...
$obj = Translate::getInstance(); $text = $obj->getTranslation('mysql_connect1'); |
||
H13 Profil |
#25 · Zasláno: 22. 8. 2006, 16:17:52 · Upravil/a: H13
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 |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0