Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][class] zmienna array private w innym pliku
-mag32-
post
Post #1





Goście







Witam.
Piszę obsługę wielu języków strony.
Zrobiłem klase która zwraca odpowiedni komunikat w wyznaczonym języku.
Problem pojawia się, gdy chcę oddzielić komunikaty od pliku klasy.

Gdy jest tak to działa, zapisane w pliku class_lang.php
  1. <?php
  2. class lang_loader
  3. {
  4. private $lang =array
  5. (
  6. 480001=>"Komunikat1",
  7. 480002=>"Komunikat2",
  8. );
  9.  
  10. public function getLangText($text)
  11. {
  12. return $this->lang[$text];
  13. }
  14. }
  15. ?>


wywoływane z pliku np. index.php
  1. <?php
  2. require ('./lang/class_lang.php');
  3. $langtext = new lang_loader;
  4. echo $langtext->getLangText(480001);
  5. ?>


Natomiast chcę same komunikaty zapisać do innego pliku, zestawu plików językowych i wtedy coś mi nie chce wychodzić.
Pojawia siękomunikat:
Parse error: parse error, expecting `T_FUNCTION' in C:\wamp\www\isztar\lang\class_lang.php on line 4
plik przybrał taką postać
  1. <?php
  2. class lang_loader
  3. {
  4. require('./lang/lang.pl.php');
  5.  
  6. public function getLangText($text)
  7. {
  8. return $this->lang[$text];
  9. }
  10. }
  11. ?>


a plik lang.pl.php
  1. <?php //jezyk Polski
  2. $lang =array
  3. (
  4. 480001=>"komunikat1",
  5. 480002=>"komunikat2"
  6. );
  7. ?>

Nie bardzo wiem jak to rozwiązać i w czym jest problem, próbowałem już na różne sposoby, ale nie wychodzi.
Domyślam się, że coś robię źle z tym dołączeniem pliku, ale nie wiem jak to rozwiązać.
Go to the top of the page
+Quote Post
Daiquiri
post
Post #2





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Zastanów się co robisz, mianowicie "wklejasz" w to miejsce kawałek kodu, który został zawarty w pliku lang.pl.php i dostajesz następującą rzecz:

  1. <?php
  2. class lang_loader
  3. {
  4. // require('./lang/lang.pl.php'); zamiast tego:
  5. $lang =array
  6. (
  7. 480001=>"komunikat1",
  8. 480002=>"komunikat2"
  9. );
  10.  
  11. public function getLangText($text)
  12. {
  13. return $this->lang[$text];
  14. }
  15. }
  16. ?>
Domyślasz się już gdzie jest błąd? smile.gif Zobacz czym się różni ten kod, od tego "działającego".

Co innego gdybyś przekazał zawartość tablicy do egzemplarza obiektu i np. w konstruktorze, a potem udostępnił ją dla funkcji w klasie i wtedy dopiero zwrócił wybrany element.

Ten post edytował Daiquiri 21.11.2010, 15:02:46
Go to the top of the page
+Quote Post
-mag32-
post
Post #3





Goście







No tak.
Więc

  1. $lang =array

a powinno być

  1. private $lang =array

To masz na myśli?

Cytat
przekazał zawartość tablicy do egzemplarza obiektu
i np. w konstruktorze,
a potem udostępnił ją dla funkcji w klasie i wtedy dopiero zwrócił wybrany element.


Co prawda nie jestem całkiem zielony z tego, ale jak byś mógł nieco jaśniej, to był bym wdzięczny.
Go to the top of the page
+Quote Post
Daiquiri
post
Post #4





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Jeżeli przebudowałbyś odpowiednio swoją klasę, mógłbyś przekazać potrzebną tablicę, już przy tworzeniu nowego ezgemplarza obiektu, np.
  1. class lang_loader {
  2. private $lang;
  3.  
  4. function __construct($tablica_z_danymi) {
  5. $this->lang = $tablica_z_danymi;
  6. }
  7.  
  8. public function getLangText($text){
  9. return $this->lang[$text];
  10. }
  11. }

  1. $tablica_lang =array ( 480001=>"komunikat1", 480002=>"komunikat2");
  2.  
  3. $lang = new lang_loader(); // tak tworzysz nowy egzemplarz obiektu teraz ;-)
  4. $lang = new lang_loader($tablica_lang); // a tak w przypadku zmodyfikowanej klasy powyżej


Nie wiem natomiast jak wygląda całość kodu, więc to jedynie sugestia. Mam nadzieję, że nie pokręciłam zmiennych w przykładzie smile.gif.

Ten post edytował Daiquiri 21.11.2010, 16:01:53
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #5





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


Zapytam z innej beczki: nie przeszkadza ci tłumaczenie po id? Ja się z tym spotykam w Homeworld 2 przy okazji modowania i szczerze nienawidzę takiego rozwiązania, ale co zrobić biggrin.gif.
Go to the top of the page
+Quote Post
-mag32-
post
Post #6





Goście







Co więc proponujesz Mephistofeles? Ta strona jest pisana od zera więc puki co wszystko dozwolone.
Jakie inne rozwiązanie?

Teraz wygląda to TAK:

plik class_lang.php
  1. <?php
  2. class lang_loader
  3. {
  4. private $lang;
  5.  
  6. public function __construct($data_array)
  7. {
  8. $this->lang=$data_array;
  9. }
  10.  
  11. public function getLangText($parameter)
  12. {
  13. return $this->lang[$parameter];
  14. }
  15. }
  16. ?>

plik lang.pl.php
  1. <?php //jezyk Polski
  2. $array_lang =array
  3. (
  4. 480001=>"komunikat1",
  5. 480002=>"komunikat2"
  6. );
  7. ?>

plik index.php
  1. <?php
  2.  
  3. require('./settings_start.php');
  4.  
  5. require (LIBRARY.'class_lang.php');
  6. require (LANGUAGE.'lang.pl.php');
  7.  
  8. $langtext = new lang_loader($array_lang);
  9. echo $langtext->getLangText(480001);
  10. ?>

i działa jak chciałem
DZIĘKI WIELKIE Daiquiri
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:50