Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wynik funkcji wynikiem drugiej funkcji
Forum PHP.pl > Forum > Przedszkole
Gajdus
Witam,
chciałbym przedstawić swój mały problem związany z programowaniem PHP. Wykonałem szablon zrobiony na klasie (nazwijmy class Strona). Następnie chciałem zrobić system wyświetlania informacji z bazy danych, użyłem kolejnej klasy (nazwijmy class Mikro). Klasa `mikro` pobiera rekordy z bazy danych. Klasa `strona` buduje szablon strony, najważniejszy kod strony to:


  1. <?php
  2. public $content = "Treść";
  3.  
  4. public function Wyswietl() {
  5. echo "tutaj trochę htmlu statycznego";
  6. $this->WywołanieJakiejśFunkcji();
  7. echo $this->content; /* wywołanie zawartości strony */
  8. echo "znowu html statyczny";
  9. }
  10.  
  11. ?>


Tworząc index.php, treść strony ładuję w zmienną $content. Problem pojawia się gdy z treści statycznej potrzebuję treść dynamiczną. Używałem różnych metod, ostatecznie zostało:

  1. <?php
  2. $index->content = "<h1>Mikro</h1>$mikro->Wczytaj()";
  3. ?>


Efekt jest taki, że wyrażenie Mikro pojawia się w tym bloku, w którym musi. Jednak cała zawartość $mikro->Wczytaj() (jest to zwykła pętla while z wyjściowym echo) pojawia się przed statycznym kodem HTML. Wygląda to tak jakby najpierw wyświetlała się funkcja z pętlą, następnie generowała cała strona. Domyślam się, że muszę w klasie Strona zrobić nową funkcję, zajmującą się wczytywaniem treści. Nie mam jednak pomysłu (i tu jest moje pytanie do Was) jak by takie coś wyglądało. Kod strony to oczywiście nie tylko ta jedna funkcja by była, a trochę więcej kodu PHP. Ktoś jest w stanie mi pomóc? Większy fragment kodu PHP:

  1. /* klasa Strona */
  2. <?php
  3. class Strona {
  4. public $content; // <- odpowiada za zawartość strony
  5. public $title; // <- odpowiada za tytuł strony
  6.  
  7. public function __set($nazwa, $wartosc) {
  8. $this->$nazwa = $wartosc;
  9. }
  10.  
  11. public function Wyswietl() {
  12. echo "<html>\n<head>\n<title>$this->title</title>\n</head>\n<body>\n<div id=\"wrapper\">\n";
  13. echo $this->content;
  14. echo "</div></body></html>";
  15. }


  1. /* klasa Mikro */
  2. <?php
  3. class Mikro {
  4. public $db;
  5. public $entries;
  6. public $zapytania;
  7.  
  8. private function Polacz() {
  9. /* tutaj sie lacze z baza */
  10. }
  11.  
  12. public function Pobierz() {
  13. /* tutaj pobieram rekordy z bazy danych */
  14. }
  15.  
  16. public function Wczytaj() {
  17. $zapytania = $this->Pobierz();
  18. while($row = $zapytania->fetch_array()) {
  19. echo "<p>$row[3]</p>";
  20. }
  21. }
  22. }
  23. ?>


  1. /* plik mikro.php */
  2. <?php
  3. require(/* tutaj importujemy trzy pliki klas: strona, mysqli, mikro */);
  4.  
  5. $index = new Strona;
  6. $mikro = new Mikro;
  7.  
  8. $index->title = "Nowy tytuł strony";
  9. $index->content = $mikro->Wczytaj();
  10.  
  11. $index->Wyswietl();
  12. ?>


Dodam jeszcze, że cały kod działa poprawnie. Tylko pętla jest umieszczana przed kodem HTML strony (dokładnie przed <!doctype html>).
nospor
Problem z obietkowką nie ma zadnego zwiazku. Przenosze. To sa podstawy obslugi funkcji.
JAk chcesz by funkcja ci cos zwracala to masz uzywac RETURN a nie ECHO. Echo wali od razu na ekran
Gajdus
Return zwraca jeden wynik z pętli, echo wszystkie. Jakieś inne sposoby?
nospor
NIe, return zwraca to co podasz. jak dajesz return w petli to nic dziwnego ze zwraa tylko jeden rekord bo return konczy natychmiast cala funkcje.....return ma byc po petli i do return masz przekazac wszystkie wyniki z petli.
Gajdus
Dzięki za pomoc, metoda zadziałała. Idę poczytać więcej o echo i return.
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.