Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zbędne wyświetlenie tablicy 2 raz
Forum PHP.pl > Forum > Przedszkole
!*!
  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. );
Daiquiri
A co zawiera $lang powyżej?
!*!
Tablicę $lang z pliku.
Daiquiri
OK, a jak robisz print_r($lang) w miejscu print_r($this->lines) to też jest podwójnie? smile.gif
!*!
Tak, nadal są dwie. hmm może coś jest nie tak z self::instance()->lines[$key] i vsprintf, tylko za bardzo nie wiem co.
Daiquiri
  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
nospor
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
!*!
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.
nospor
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.
Daiquiri
Może zrób prywatny konstruktor i nie będziesz mógł się "pomylić".
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.