Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klasa szablonów i include, Brak zmiennych?
Brand
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.10.2009

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


Witam. Mam problem z moim skryptem. W szablonie nie widać zmiennych zadeklarowanych w klasie Index. Szablon jest wczytywany przez klasę Theme. Próbowałem ze zmiennymi globalnymi, ale to niestety nie pomaga. Czy jest jakieś rozwiązanie? Załączam uproszczoną wersję mojego skryptu. Pozdrawiam. (IMG:style_emoticons/default/smile.gif)

  1. <?php
  2. # index.php
  3. class Index
  4. {
  5. public function __construct()
  6. {
  7. $var = 'It works!';
  8. include('templates.class.php');
  9. $theme = new Theme;
  10. $theme -> load();
  11. }
  12. }
  13. new Index;
  14. ?>

  1. <?php
  2. # templates.class.php
  3. class Theme
  4. {
  5. public function load()
  6. {
  7. return include('szablon.php');
  8. }
  9. }
  10. ?>

  1. <?php
  2. # szablon.php
  3. echo 'theme included';
  4. echo '<br />';
  5. echo $var;
  6. ?>
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://php.net/manual/pl/language.variables.scope.php
Czytasz aż do skutku

Ten post edytował wookieb 23.07.2010, 11:43:42
Go to the top of the page
+Quote Post
slightyboy
post
Post #3





Grupa: Zarejestrowani
Postów: 52
Pomógł: 12
Dołączył: 12.07.2007

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


Jeśli przeniesiesz deklarację zmiennej do metody Theme::load() wszystko będzie działało, zmienne muszą być deklarowane w tej samej metodzie/funkcji w której załączany jest plik z szablonem. Jeśli więc chcesz pozostawić taki układ klas, do metody Theme::load dorzuć jako parametr tablicę (lub obiekt) ze zmiennymi, np. Theme::load($vars), następnie z wykorzystaniem pętli przypisz zmienne (z tablicy lub obiektu) do ich odpowiedników ($vars->zmienna => $zmienna etc.). (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Brand
post
Post #4





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.10.2009

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


Cytat
zmienne muszą być deklarowane w tej samej metodzie/funkcji w której załączany jest plik z szablonem

Właśnie wiem, ale myślałem że return include będzie traktowany tak, jakby ten plik był dołączany w klasie Index. Widocznie się myliłem. Pozostaje mi więc twoje rozwiązanie. Wielkie dzięki za szybką i trafną odpowiedź. Pozdrawiam. (IMG:style_emoticons/default/winksmiley.jpg)

Edit: Jest może w PHP jakaś funkcja, która zwracałaby tablicę ze zmiennymi lokalnymi?

Ten post edytował Brand 23.07.2010, 12:01:51
Go to the top of the page
+Quote Post
slightyboy
post
Post #5





Grupa: Zarejestrowani
Postów: 52
Pomógł: 12
Dołączył: 12.07.2007

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


Cytat(Brand @ 23.07.2010, 12:53:37 ) *
Edit: Jest może w PHP jakaś funkcja, która zwracałaby tablicę ze zmiennymi lokalnymi?
get_defined_vars
Go to the top of the page
+Quote Post
Brand
post
Post #6





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.10.2009

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


Super, tego właśnie potrzebowałem. Podaję moje rozwiązanie. Do Theme::load() dodałem parametr $vars, i potem przed include:
  1. foreach($vars as $name => $value)
  2. {
  3. $var_name = $name;
  4. $$var_name = $value;
  5. }

W efekcie przenosi to zmienne lokalne do Theme::load() w miejscu wywołania tej metody, przez co widoczne są w includowanym pliku. Jeszcze raz wielkie dzięki. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


To samo robić extract.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #8





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Problem dotyczyt składni, a nie paradygmatu -> PHP
Go to the top of the page
+Quote Post
Brand
post
Post #9





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 28.10.2009

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


Mówisz o kodzie z pierwszego postu?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 01:16