Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: include w klasie
Forum PHP.pl > Forum > PHP > Object-oriented programming
D4rky
Utworzyłem klasę do obsługi szablonów, i jestem już przy końcu. Mam jednak następujący problem:
Gdy już wszystko jest wygenerowane, chciałem include'ować plik $this->cache.$this->filename.$this->ext.".php". Jednak gdy include'uję w funkcji, plik nie ma dostępu do zmiennych, które są w pliku, w którym znajduje się odwołanie do klasy. Czyli jeśli zrobię np
  1. <?php
  2. class template
  3. {
  4.  function show()
  5. {
  6. include("plik.php");
  7. }
  8. }
  9. ?>
  10. $t = new template;
  11. $a = "123";
  12. $t->show();
  13. ?>

Gdzie plik.php to
  1. <?php
  2. echo $a;
  3. ?>

Dostanę nic.
Jest jakiś sposób na ominięcie tego? Próbowałem zgrywać zawartość pliku przez eval, ale mam tam pomieszany HTML z PHP, i w ten sposób się nie da. Nie chcę też przekazywać zmiennych przez jakąś funkcję, bo z założenia, template ma mieć dostęp bez kombinowania. No, ale jeśli się nie da, nie będę miał wyboru.
hwao
Ponieważ zmienna deklarujesz w innej przestrzeni, dlatego nie posiadasz do niej dostępu.

Możesz to rozwiązać przypisując dane do systemu szablonów i udostępnianie ich we właściwości bądź zmiennych w "szablonie".
D4rky
Cytat(hwao @ 31.03.2007, 22:11:25 ) *
Ponieważ zmienna deklarujesz w innej przestrzeni, dlatego nie posiadasz do niej dostępu.

Możesz to rozwiązać przypisując dane do systemu szablonów i udostępnianie ich we właściwości bądź zmiennych w "szablonie".


Właśnei tego rozwiązania chcę uniknąć, bo niesie za sobą za dużo następstw i problemów. W moim skrypcie można tworzyć bloki i zamieniać je na foreache, ify itp. Przez to, że muszę się odwoływać za pomocą $this->vars['zmienna'], taki foreach traci sens, bo praktycznie nie da się go wykorzystać do array. Próbowałem i kombinowałem, ale za przeproszeniem gówno z tego wyszło.

Muszę znaleźć jakiś inny sposób.
hwao
  1. <?php
  2. class template {
  3.  protected $aVars = array();
  4.  
  5.  public function a( $sKey, $mValue ) {
  6. $this->aVars[$sKey] = $mValue;
  7.  }
  8.  
  9.  public function aar( $sKey, &$mValue ) {
  10. $this->aVars[$sKey] = $mValue;
  11.  }
  12.  
  13.  public function show() {
  14. extract( $this->aVars );
  15.  
  16. include("plik.php");
  17.  
  18.  }
  19. }
  20. ?>


  1. <?php
  2. $tpl = new template();
  3. $tpl->a( 'a', 'test' );
  4. $b=2;
  5. $tpl->aar( 'b', $b );
  6. $tpl->show();
  7. ?>


show.php
  1. <?php echo $a."n".$b."n"; ?>
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.