Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][class]Mieszanie klas
Forum PHP.pl > Forum > PHP
szmerak
  1. <?
  2. class Lang {
  3. private $lang;
  4. function __construct()
  5. {
  6. $this->lang = "pl-lang";
  7. }
  8. public function GetLangs($lg)
  9. {
  10. include 'languages/'.$lg.'.php';
  11. $this->lang = $lg;
  12. return $lang;
  13. }
  14. public function GetLang($k)
  15. {
  16. $lang = $this->GetLangs($this->lang);
  17. foreach($lang as $key => $value)
  18. {
  19. if($k == $key)
  20. {
  21. $result = $value;
  22. }
  23. }
  24. return $result;
  25. }
  26. }
  27. ?>


Mam tutaj klasę której będę używać do pobierania langów itp... Lecz z tym rodzi się mały problem.
Ponieważ tych klas jest parę i nie wiem jak stworzyć komunikację między nimi...

Pamiętam że gdzieś o tym czytałem jakoś na "i" się to nazywało ale nie umiem sobie za nic przypomnieć.

A teraz przejdę do rzeczy...
Mam tą klasę wyżej i teraz będą jeszcze dwie.

  1. class Template {
  2. public function DBCriticalError($key)
  3. {
  4. $lang = Lang::GetLang($key);
  5. echo $lang;
  6. }
  7. }


I potem w klasie DB chciał bym wywołać funkcję Template::DBCriticalError("DB_ERROR");
i aby ta pobrała Lang i go wyświetliła. Lecz wyskakuje że undefined function ;/ a dokładniej to:

  1. Fatal error: Call to undefined method DB::GetLangs() in D:\Program Files\WebServ\httpd\nowa\classes\lang.class.php on line 16


Proszę o pomoc głównie tylko o metodę "tworzenia połączenia między klasami"
skowron-line
i jak implements albo e jak extends
lobopol
Zapewne dlatego, że odwołujesz się do metod jak do metod statycznych, a w nich nie możesz się odwoływać do $this. Po pierwsze zmień te metody na statyczne, i zmienną lang też daj statyczną i przy odwołaniu zamiast $this->lang to self::$lang
szmerak
Dziękuje ci bardzo za pomoc Wszystko działa już jak powinno tylko teraz mam problem ze zmienną statyczną lang...
Konstruktor nie chce nadać jej wartośći a co z tym idzie plik się nie wczytuje z langów jak widać w metodzie wyzej

source konstruktora
  1. function __construct()
  2. {
  3. self::$lang = "pl-lang";
  4. }


//dobra już wsumie to zrobiłem
nadałem lang odrazu = "pl-lang";
Fifi209
Jeżeli masz klasę statyczną, statyczne metody i zmienne to trudno, abyś mógł używać konstruktora.

Konstruktor jest uruchamiany automatycznie przy TWORZENIU obiektu, którego nigdzie nie tworzysz, jasne? smile.gif
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.