Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][class] zmienna array private w innym pliku
Forum PHP.pl > Forum > Przedszkole
mag32
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ć.
Daiquiri
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.
mag32
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.
Daiquiri
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.
Mephistofeles
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.
mag32
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.