Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP5, OOP] includowanie plikow przez klase
phpion
post
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


$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.
Go to the top of the page
+Quote Post
Mirer
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 23.08.2006

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


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.

Ten post edytował Mirer 24.08.2006, 09:41:13
Go to the top of the page
+Quote Post
thornag
post
Post #4





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


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 ?

Ten post edytował thornag 25.08.2006, 12:20:31


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

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: 19.08.2025 - 06:57