Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Zbędne wyświetlenie tablicy 2 raz
!*!
post 8.09.2011, 07:57:21
Post #1





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


  1. class Lang
  2. {
  3. private $prefix;
  4. private $lines = array();
  5.  
  6. private static $instance = false;
  7.  
  8. public function __construct($prefix)
  9. {
  10. $this->prefix = $prefix;
  11. $this-> set_lang();
  12. } // end __construct
  13.  
  14. private function instance()
  15. {
  16. //echo $prefix;
  17. if(self::$instance == false)
  18. {
  19. self::$instance = new Lang(DEFAULT_LANG);
  20. }
  21. return self::$instance;
  22. } // end instance
  23.  
  24. private function set_lang()
  25. {
  26. if(isset($_GET['lang']))
  27. {
  28. //echo $prefix;
  29. $this->prefix = strtolower($_GET['lang']);
  30. //$_SESSION['lang'] = $this->prefix;
  31. //echo 'wybrano:.....'.$this->prefix;
  32. }
  33. elseif(isset($_SESSION['lang']))
  34. {
  35.  
  36. $this->prefix = strtolower($_SESSION['lang']);
  37. $_SESSION['lang'] = $this->prefix;
  38. }
  39. else
  40. {
  41. $this->prefix = strtolower(DEFAULT_LANG);
  42. }
  43.  
  44. $this-> load_lang_file();
  45. } // end set_lang
  46.  
  47. private function load_lang_file()
  48. {
  49.  
  50. if(file_exists('./lang/'.$this->prefix.'.lang'.EXT))
  51. {
  52. //echo 'istnieje';
  53. include './lang/'.$this->prefix.'.lang'.EXT;
  54. $this->lines = $lang;
  55. echo '<pre>';
  56. print_r($this->lines);
  57. }
  58. } // end load_lang_file
  59.  
  60. public static function get($key = false)
  61. {
  62. //var_dump($key);
  63. //echo '<span style=color:red>'.$key.'</span>';
  64. //return vsprintf(self::instance()-> lines[$key], $params);
  65.  
  66. if(isset(self::instance()->lines[$key]))
  67. {
  68. return vsprintf(self::instance()-> lines[$key], false);
  69. }
  70. else
  71. {
  72. return false;
  73. }
  74.  
  75. }// end get
  76.  
  77. } // end class Lang


Dlaczego kod

  1. echo '<pre>';
  2. print_r($this->lines);


w metodzie load_lang_file() wyświetla dwa razy tą samą tablice?

Plik z tłumaczeniem wygląda tak:

  1. $lang = array(
  2. 'mobile_version' => 'wersja mobilna',
  3. 'site_map' => 'mapa witryny',
  4. 'contact' => 'kontakt'
  5. );


Ten post edytował !*! 8.09.2011, 08:05:08


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Daiquiri
post 8.09.2011, 08:02:13
Post #2





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




A co zawiera $lang powyżej?
Go to the top of the page
+Quote Post
!*!
post 8.09.2011, 08:04:20
Post #3





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Tablicę $lang z pliku.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Daiquiri
post 8.09.2011, 08:09:17
Post #4





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




OK, a jak robisz print_r($lang) w miejscu print_r($this->lines) to też jest podwójnie? smile.gif
Go to the top of the page
+Quote Post
!*!
post 8.09.2011, 08:11:37
Post #5





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Tak, nadal są dwie. hmm może coś jest nie tak z self::instance()->lines[$key] i vsprintf, tylko za bardzo nie wiem co.

Ten post edytował !*! 8.09.2011, 08:15:46


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Daiquiri
post 8.09.2011, 08:28:35
Post #6





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




  1. if (self::$instance->lines[$key]) {
  2. return vsprintf(self::$instance->lines[$key], FALSE);
  3. }

To powinno być ok. Pytanie skąd bierzesz $lang ($this->lines = $lang;)? Na Twoim miejscu "wracałabym" się o krok, żeby wyłapać gdzie jest błąd.

@Nospor:
Co racja to racja biggrin.gif
Powód edycji: [Daiquiri]:
Go to the top of the page
+Quote Post
nospor
post 8.09.2011, 08:32:37
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A może rozwiązanie jest banalne, jak to bywa w 99% takich przypadków na forum:
odpalasz ten kod dwukrotnie, to się wyświetla podwójnie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
!*!
post 8.09.2011, 08:35:08
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Daiquiri - $this->lines = $lang; $lang to tablica w pliku jaki pobieram.
nospor - faktycznie też to przed chwilą zauważyłem

Kod
new Lang('pl');
echo Lang::get('mobile_version');


Spowoduje wyświetlenie dwa razy, jeśli pominę new Lang będzie ok, jednak zdawało mi się że właśnie od tego jest $instance aby nie "ładowało" klasy 2 razy.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
nospor
post 8.09.2011, 08:48:55
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
jednak zdawało mi się że właśnie od tego jest $instance aby nie "ładowało" klasy 2 razy.
Bo i do tego jest, ale trzeba to tez odpowiednio używać.
A skoro ty ręcznie robisz NEW no to pomijasz swoje instance. Potem w instance znowu robisz NEW i masz dwa razy.

Jak już używasz instance to nie rób już
new Lang('pl');
bo przecież tu ręcznie tworzysz nowy obiekt.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Daiquiri
post 8.09.2011, 08:58:15
Post #10





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




Może zrób prywatny konstruktor i nie będziesz mógł się "pomylić".
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: 18.08.2025 - 23:20