Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] ob_start i zapis do pliku przez dziedziczenie
Forum PHP.pl > Forum > Przedszkole
asdc
  1. class Bar
  2. {
  3. function error()
  4. {
  5. $o = new View()
  6. $o->parse('error,html');
  7. echo $o->render();
  8. }


  1. class Foo extends Bar
  2. {
  3. function index()
  4. {
  5. $o = new View()
  6. $o->parse('file,html');
  7. echo $o->render();
  8. }
  9.  
  10. }
  11.  
  12. }


Klasa View to nic innego jak metoda

  1. extract($tags, EXTR_SKIP);
  2.  
  3.  
  4. include $templatePath;
  5. $template_return = ob_get_contents();
  6. file_put_contents($fileName, $template_return);
  7.  


Ktoś mi wyjaśni dlaczego wszytko działa poprawnie, jednak gdy klasa Foo dziedziczy po Bar, to zapisywany jest również plik error pomimo że metoda error klasy Bar nie jest wykonywana?
Gdy nie używam dziedziczenia, wszytko działa poprawnie i są zapisywane tylko te pliki które sa w danych metodach.
Gość
Nikt nie wie?
aras785
Z tego co zrozumiałem to masz coś podobnego:

  1. <?php
  2. class view {
  3. public $tekst;
  4. function setText($text) {
  5. $this->tekst = $text;
  6. }
  7. function render() {
  8. return $this->tekst;
  9. }
  10. }
  11.  
  12. class bar {
  13. function error() {
  14. $o = new view();
  15. $o->setText('Tekst dla error');
  16. echo $o->render();
  17. }
  18. }
  19. class foo extends bar{
  20. function index() {
  21. $o = new view();
  22. $o->setText('Teskt dla index');
  23. echo $o->render();
  24. }
  25. }
  26.  
  27. $a = new foo();
  28. $a->index();
  29. ?>


i co źle chodzi? Daj wszystko co masz bo nikt chyba nie rozumie problemu
Gość
Tak i jeśli w klasie View dam kod

  1. extract($tags, EXTR_SKIP);
  2. include $templatePath;
  3. $template_return = ob_get_contents();
  4. file_put_contents($fileName, $template_return);


To zapisywany jest tekst z foo index (metoda wywoływana) i z bar error (metoda która się nie wywołuje).
Na ekran wypluty jest tylko tekst prawidłowy, z funckji foo index, ale w "cache" siedzi też ten z bar error, plik jest zapisywany i chciałbym wiedzieć dlaczego tak się dzieje.
Z początku myślałem że popełniłem gdzieś błąd, ale napisałeś dokładnie to tak jak ja. Nie rozumiem dlaczego plik jest zapisywany, z klasy bar metody error, pomimo że nie jest nigdzie bezposrednie do niego odwołanie.

Sprawdzałem kod xdebugiem i działa prawidłowo, wszytko jest ok, poza tym że ten plik i tak jest zapisywany gdy używam ob_start i extends biggrin.gif
!*!
Nie przejmuj się tym, to "normalne". Swego czasu też mi to krwi napsuło, bo nie mogłem znaleźć przyczyny takiego "nadmiarowego" wywoływania metod i zrzucania cache do pliku. Takie akcje dzieją się tylko na localhost, możliwe że to jakiś bug związany z połączeniem przeglądarki na localu (zauważ że wysyłając zapytania np. przez dragonfly w operze czy chrome lub wget do bufora trafiają tylko te pliki które mają).

Na serwerach takie bugi nie występują.
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.