Autor | Zpráva | ||
---|---|---|---|
Fisak Profil * |
#1 · Zasláno: 25. 12. 2011, 11:48:17
Zdravím... mám malý problém... objektování mi moc nejde ale snažím se udělat překladatele a nejde mi načíst proměnná z jednoho souboru do druhého... mám soubor index.php:
function translate($string) { include("cs.php"); return $result[$string]; } echo translate("nelze_nacist"); <?php $result = array( "nelze_nacist" => "Soubor nenačten", "lze_nacist" => "Soubor:" ); ?> |
||
fandaa Profil |
#2 · Zasláno: 25. 12. 2011, 12:02:16
Fisak:
Tvá ukázka mi funguje bez problémů. Vypisuje ti to nějakou chybu? Zvolil bych spíše INI soubory a funkci parse_ini_file() pro tento účel. Jsou dle mého přehlednější (při použití bloků v poli se musí vytvářet další pole, což je složitější na čitelnost a někteří editoři by s tím mohli mít problémy) a lépe srozumitelné pro případné jazykové editory. |
||
Nox Profil |
#3 · Zasláno: 25. 12. 2011, 12:02:35 · Upravil/a: Nox
Tady není objektového nic
Includování ve funkci je dost špatný nápad, načítá a parsuje se zbytečně soubor při každém volání. Zrovna tady by se ten objekt hodil, aby se mu nastavil ten zdroj a jazyk a už se pak jenom volal string, jinak by asi bylo lepší zdroje předávat. Myslím si, že obecně by to mělo fungovat Máš error_reporting() na E_ALL a display_errors na on (nebo 1) (pomocí ini_set nebo .htaccess ... případně zagoogluj)? Možná to ten soubor totiž nenašlo, takže to nemohlo najít ani $result |
||
Fisak Profil * |
#4 · Zasláno: 25. 12. 2011, 12:42:03 · Upravil/a: Fisak
php_flag display_errors on
a soubor to našlo to sem ověřoval tim že sem přehodil proměnný a do cs.php sem dal echo "ahoj"; a pak sem tam hodil result translate(); a facha to ale pokud je tam ten array tak to nefachá ... podle mě tam je chyba že se ta proměnná $result nepromítne do tý funkce ne prostě se nenačítá z cs.php ta proměnná $result jinak je vše v poho ;-) když tam dám echo do toho cs.php tak to funguje normálně ... |
||
nethor Profil |
#5 · Zasláno: 26. 12. 2011, 17:25:46
Tvůj script funguje správně.
... ale řešil bych to taky jinak. Zhus si vypsat $result ve fci, co to vypíše ? : function translate($string) { include("cs.php"); echo "<xmp>";var_dump($result);echo "</xmp>"; return $result[$string]; } |
||
Fisak Profil * |
#6 · Zasláno: 26. 12. 2011, 21:41:08
Píše to "NULL"
|
||
Fisak Profil * |
#7 · Zasláno: 26. 12. 2011, 23:19:07
zajímavý je že když dam místo toho obsahu cs.php cokoliv jinýho tak to stejně nefunguje.. jakože se to nenačítá do toho index.php ale když napíšu do cs.php echo "ahoj"; tak to normálně fachá.. zatímco když napíšu result "ahoj"; a pak normálně vypíšu echem tu fci tak to nefachá...
|
||
Nox Profil |
#8 · Zasláno: 27. 12. 2011, 09:13:39
zkus místo $result = dát return a ve funkci potom $result = include(...
|
||
Fisak Profil * |
#9 · Zasláno: 27. 12. 2011, 11:14:40
jooo to fachá paráda děkuji moc :-) ty bláho...
|
||
Ugo Profil |
#10 · Zasláno: 27. 12. 2011, 11:19:27
A teď se přiznej, žes to celou dobu měl jinak než jsi napsal? (bez $result=) Jinak sem totiž asi totální blázen páč nechápu proč ti to nefunguje.
|
||
Fisak Profil * |
#11 · Zasláno: 27. 12. 2011, 11:39:49
Nn fakt sem to měl tak jak sem psal... klidně ti to streamnu že to prostě tak nefachá :-)
|
||
Ugo Profil |
#12 · Zasláno: 27. 12. 2011, 11:50:50
To sem slyšet nechtěl :-D
Jedině mě napadá jestli to neni nastavení serveru nějaký buffering třebas. Protože toto mi nejde do hlavy a ani zběžná prohlídka dokumentace žádný takový chování neříká. (stejně jako fandaa jsem to totiž samozřejmě odzkoušel a vše v pohodě). Nevim co by to mohlo bejt za nastavení nebo bug, zvláště když i na windowsim apachi kde půlka věcí funguje špatně to jde :) |
||
Fisak Profil * |
#13 · Zasláno: 27. 12. 2011, 13:27:02
noo může to být serverem :-) to mě taky napadlo.. ale ještě sem to neozkoušel na jinym serveru :-) takže nevím... nicméně tady je complet kód:
soubor cs.php <?php return array( /*----------------------------------------------------------------------------------------------------*/ "save_change" => "uložit změny", "restore" => "obnovit", "delete" => "smazat", "create" => "vytvořit", "save" => "uložit", "cancel" => "zrušit", "moduls" => "moduly", "logon" => "přihlásit", "logout" => "odhlásit", "edit" => "upravit", "url" => "URL", "rename" => "přejmenovat", "check_all" => "zaškrtnou vše", "uncheck_all" => "odškrtnout vše", "name" => "název", "category" => "kategorie", "size" => "velikost", "gallery" => "galerie", "file_manager" => "správce souborů", "all_right_reserved" => "všechna práva vyhrazen", "no_loading" => "nenačteno", "loading" => "načítání" /*----------------------------------------------------------------------------------------------------*/ ); ?> a zde je soubor idex.php <?php //překladač function translate($string) { $result_translate = require("cs.php"); return $result_translate[$string]; } echo translate("save_change"); ?> |
||
Nox Profil |
#14 · Zasláno: 27. 12. 2011, 13:49:54
Chápeš tedy ale, že pokud zavoláš translate() 1000x, tak se 1000x poleze na disk? (http://i.imgur.com/X1Hi1.gif)
Dej require jednou a už to ber z toho |
||
Mastodont Profil |
#15 · Zasláno: 27. 12. 2011, 13:59:15
Trošku si to uprav ...
function translate($string) { static $result_translate = false; if ($result_translate === false) { $result_translate = require("cs.php"); } return $result_translate[$string]; } |
||
Fisak Profil * |
#16 · Zasláno: 27. 12. 2011, 14:20:24
Mastodont: proč v 3. řádku je 3x === ????
|
||
Nox Profil |
#17 · Zasláno: 27. 12. 2011, 14:23:28 · Upravil/a: Nox
Pokud se použije ==, PHP používá porovnávání podle tabulky http://php.net/manual/en/types.comparisons.php
Při === se musí přesně shodovat i typ proměnné (zde false ~ boolean) Poměrně velký význam má ten rozdíl u objektů, ale o tom tu není teď řeč Pokud bys tam např. neměl překlady a měl tam tudíž return array(), načítalo by to pořád znova. Jinak to tu asi není vyloženě kritické, ale není to na škodu Někdo preferuje upřednosťnovat === a jen tam, kde to dává smysl, používat == |
||
Mastodont Profil |
#18 · Zasláno: 27. 12. 2011, 14:39:12
Někdo preferuje upřednosťnovat === a jen tam, kde to dává smysl, používat ==
Kdysi jsem v nějakém článku o mikrooptimalizacích četl, že === je i rychlejší (protože odpadá casting), ale to vem čert ... je ovšem třeba dávat bedlivý pozor tam, kde fukce může vrátit false i nulu a každý údaj znamená něco jiného. |
||
Fisak Profil * |
#19 · Zasláno: 27. 12. 2011, 15:26:46
Mastodont: prosím tě dá se ještě nějak upravit moje připojení do db tak aby se taky nepřipojovalo do db 1000x když tam budu mít 1000 dotazů ?? nějak tím tvým způsobem?? kód:
function db_connect($db_name){ if(!@mysql_connect(db_server,db_login,db_pass)){ $this->__err_message(); return -1; } else { if(!@mysql_select_db($db_name)){ $this->err = "Nepodařilo se vybrat databázi."; return -1; } else { mysql_query("SET character_set_results = utf8"); mysql_query("SET character_set_connection = utf8"); mysql_query("SET NAMES utf8"); return 1; } } } function db_system($retezec) { db_connect(db_name_system); return @mysql_query($retezec); } |
||
Nox Profil |
#20 · Zasláno: 27. 12. 2011, 19:39:11
Fisak:
třeba function db_system($retezec) { static $connected = false; if( $connected === false ) db_connect(db_name_system); return mysql_query($retezec); } |
||
Časová prodleva: 12 let
|
0