Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP5, OOP] includowanie plikow przez klase
Forum PHP.pl > Forum > PHP
phpion
Czesc. Chcialbym, aby klasa Language includowala mi plik z danymi do wersji jezykowej. Szkopul w tym, ze plik jest includowany tylko w obrebie klasy, a nie w obrebie pliku, w ktorym jest wykorzystywana klasa. Danego includowane sa jako tablica $content wiec probowalem nawet po zainlucodwaniiu przypisac je do zmiennej publicznej ale wtedy otrzymywalem blad:
  1. Fatal error: Using $this when not in object context in /var/www/html/multideas/classes/Language.class on line 16

A oto kod:
  1. <?php
  2. class Language
  3. {
  4. public $content = Array();
  5.  
  6. static function load($language = NULL)
  7. {
  8. if (!is_null($language))
  9. {
  10. $explode = explode('/', $_SERVER['SCRIPT_NAME']);
  11. $file = './languages/'.$language.'/'.str_replace('.php', '.lang', $explode[(count($explode) - 1)]);
  12.  
  13. if (file_exists($file))
  14. {
  15. include($file);
  16. $this->content = $content; // tu sypie bledem
  17. return TRUE;
  18. }
  19. else
  20. return FALSE;
  21. }
  22. else
  23. return FALSE;
  24. }
  25. }
  26. ?>
mike
$this o klasie odnosi się do obiektu.
A dokładniej kiedy masz obiekt to żeby mógł on się odwołać sam do siebie korzysta z $this.

D czego ma w takim razie odwołać się metoda jeśli została wywołana statycznie, bez utworzenia obiektu klasy?

Scope Resolution Operator (:: )

Przenoszę z Przedszkola na php.
Mirer
Jaki to ma sens gdy nie określiłeś $content? Czy zmienna ta znajduje się w includowanym pliku (proponuje na przyszłość nie dokładać niedomówień)? Zakładając, że tak.
  1. <?php
  2. $this->content = $content;
  3. ?>


Zastanów się czy jest sens tworzyć obiekty klasy odpowiedzialnej za język. Ja bym to zrobił tak:
  1. <?php
  2. class Language
  3. {
  4. public static $content = Array();
  5.  
  6. public static function load($language = NULL)
  7. {
  8. if (!is_null($language))
  9. {
  10. $explode = explode('/', $_SERVER['SCRIPT_NAME']);
  11. $file = './languages/'.$language.'/'.str_replace('.php', '.lang', $explode[(count($explode) - 1)]);
  12.  
  13. if (file_exists($file))
  14. {
  15. include($file);
  16. self::$content = $content; // chociaż nadal nie wiem do czego odnosi się $content
  17. return TRUE;
  18. }
  19. else
  20. return FALSE;
  21. }
  22. else
  23. return FALSE;
  24. }
  25. }
  26. ?>


I później odwołujesz się do metody jak do zwykłej funkcji, tylko że używając Paamayim Nekudotayim.
thornag
Nie latwiej w pliku jezykowym definiowac stale "jezykowe" a pozniej tylko zaincludowac plik ? I jeszcze takie pytanie,, do takiego zwyklego przelaczania jezykow warto tworzyc cala otoczke obiektowa ? Nie wystarczy zwykla funkcja ktora Sprawdza zmienna sesyjna jezyka jesli nie ma takiej to, bierze url sprawdza wartosc zmiennej lang jakas tam walidacja jesli wszystko w porzadku wczytuje odpowiedni plik i rejestruje zmienna sesyjna. Jesli zmienna sesyjna jest ustawiona po prostu includuje plik na ktory ta zmienna wskazuje jakos tam ?

Ogolnie tak do szczerszej dyskusji, jakie stosujecie techniki chcac zbudowac wielojezykowa strone ?
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.