Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa zawsze zwraca tylko jedną tablicę
Forum PHP.pl > Forum > PHP
krzywy5830
Mam następujące drzewo katalogów:

Kod
public_html
    ♣ index.php

    ♣ inc
        ♥ Language.class.php

    ♣ install
        ♥ languages
            ♦ polish.lang.php

    ♣ languages
        ♥ polish
            ♦ polish.lang.php
            ♦ settings.lang.php



Zawartość pliku Language.class.php:
  1. <?php
  2. final class Language
  3. {
  4. private $lang = null;
  5. private $path = '/languages/';
  6. private $install_path = '/install/languages/';
  7. private $extension = '.lang.php';
  8.  
  9. public function __construct(string $pack = null, bool $install = false)
  10. {
  11. if(!is_null($pack))
  12. {
  13. $this->setLanguage($pack, $install);
  14. }
  15. }
  16.  
  17. public function getLanguages(bool $install = false)
  18. {
  19. try
  20. {
  21. $directoryIterator = new DirectoryIterator($_SERVER['DOCUMENT_ROOT'].$this->path);
  22. $i = 0;
  23.  
  24. foreach($directoryIterator as $pack)
  25. {
  26. if($pack->isDir() && !$pack->isDot() && !$pack->isLink())
  27. {
  28. $dir = $pack->getFilename();
  29. $settings = $_SERVER['DOCUMENT_ROOT'].$this->path.$dir.'/settings'.$this->extension;
  30.  
  31. if($install)
  32. {
  33. $file = $_SERVER['DOCUMENT_ROOT'].$this->install_path.$dir.$this->extension;
  34. }
  35.  
  36. else
  37. {
  38. $file = $_SERVER['DOCUMENT_ROOT'].$this->path.$dir.'/'.$dir.$this->extension;
  39. }
  40.  
  41. if(file_exists($settings) && file_exists($file))
  42. {
  43. require_once($settings);
  44.  
  45. if(!is_null($_LANG))
  46. {
  47. $languages[$i]['name'] = $_LANG['ST_NAME'];
  48. $languages[$i]['pack'] = $dir;
  49. $i++;
  50. }
  51. }
  52. }
  53. }
  54. }
  55.  
  56. catch(Exception $error)
  57. {
  58. exit($error->getMessage());
  59. }
  60.  
  61. unset($_LANG);
  62.  
  63. if(!is_null($languages))
  64. {
  65. sort($languages);
  66. return $languages;
  67. }
  68. }
  69.  
  70. public function setLanguage(string $pack, bool $install = false)
  71. {
  72. if($install)
  73. {
  74. $file = $_SERVER['DOCUMENT_ROOT'].$this->install_path.$pack.$this->extension;
  75. }
  76.  
  77. else
  78. {
  79. $file = $_SERVER['DOCUMENT_ROOT'].$this->path.$pack.'/'.$pack.$this->extension;
  80. }
  81.  
  82. $settings = $_SERVER['DOCUMENT_ROOT'].$this->path.$pack.'/settings'.$this->extension;
  83.  
  84. if(!file_exists($settings) || !file_exists($file))
  85. {
  86. exit('Warning: "'.$pack.'" language pack doesn\'t exists');
  87. }
  88.  
  89. require_once($settings);
  90.  
  91. if(is_null($_LANG))
  92. {
  93. exit('Warning: "'.$pack.'" is not valid language pack');
  94. }
  95.  
  96. require_once($file);
  97. $this->lang = $_LANG;
  98. }
  99.  
  100. public function getVariables()
  101. {
  102. if(is_null($this->lang))
  103. {
  104. exit('Warning: No language pack was loaded');
  105. }
  106.  
  107. return $this->lang;
  108. }
  109. }
  110. ?>



Zawartość pliku languages/polish/settings.lang.php:
  1. <?php
  2. $_LANG['ST_NAME'] = 'Polski';
  3. $_LANG['ST_CODE'] = 'pl';
  4. $_LANG['ST_DIR'] = 'ltr';
  5. ?>



Zawartość pliku languages/polish/polish.lang.php:
  1. <?php
  2. $_LANG['POZIOMKI'] = 'Lubie poziomki';
  3. ?>



Zawartość pliku install/languages/polish.lang.php:
  1. <?php
  2. $_LANG['PLACKI'] = 'Lubie placki';
  3. ?>



Zawartość pliku index.php:
  1. <?php
  2. require($_SERVER['DOCUMENT_ROOT'].'/inc/Language.class.php');
  3.  
  4. $language = new Language('polish');
  5. print_r($language->getLanguages());
  6. print_r($language->getLanguages(true));
  7. print_r($language->getVariables());
  8. ?>



A teraz opiszę mój problem. Wywołanie kodu z pliku index.php powinno dać następujący rezultat:

Kod
Array
(
    [0] => Array
        (
            [name] => Polski
            [pack] => polish
        )

)

Array
(
    [0] => Array
        (
            [name] => Polski
            [pack] => polish
        )

)

Array
(
    [ST_NAME] => Polski
    [ST_CODE] => pl
    [ST_DIR] => ltr
    [POZIOMKI] => Lubie poziomki
)



natomiast dostaję tylko to:

Kod
Array
(
    [ST_NAME] => Polski
    [ST_CODE] => pl
    [ST_DIR] => ltr
    [POZIOMKI] => Lubie poziomki
)



Ma ktoś jakiś pomysł o co chodzi?
aras785
Cześć.

W metodzie: getLanguages pododawaj sobie "else" przt ifach i będzieesz wiedział na szybko o co chodzi (else return 'blad#3'; itd.
krzywy5830
Już sobie sam poradziłem, okazało się, że trzeba było użyć require zamiast require_once, teraz działa, ale nie rozumiem dlaczego biggrin.gif
Pyton_000
to bardzo źle że nie rozumiesz...
aras785
[sql][/sql]
Cytat(krzywy5830 @ 5.08.2016, 14:09:31 ) *
Już sobie sam poradziłem, okazało się, że trzeba było użyć require zamiast require_once, teraz działa, ale nie rozumiem dlaczego biggrin.gif


http://forum.pasja-informatyki.pl/3220/req...ca#a_list_title
krzywy5830
Cytat(aras785 @ 5.08.2016, 15:41:26 ) *


Wiem czym się różni require od require_once. Nie rozumiem dlaczego nie działało z require_once, przecież dołączałem różne pliki a nie ciągle ten sam. Chodzi o to, że jak napotkało na plik z tymi samymi zmiennymi co w poprzednim to ignorowało?
nospor
Cytat
Nie rozumiem dlaczego nie działało z require_once, przecież dołączałem różne pliki a nie ciągle ten sam
Jak dla mnie to w setLanguages() dolaczasz raz pliki a potem te same pliki probujesz dołaczac w getlanguages()

Przyjmij bardzo prosta zasade: php zazwyczaj sie nie myli w odroznieniu od czlowieka. Skoro wiec require_once nie chce dolaczyc pliku, to oczywiste jest ze plik zostal dalaczony juz raz gdzies wczesniej
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.