Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wynik funkcji wynikiem drugiej funkcji, Wynik zapętlony a implementacja zmienną.
Gajdus
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 25.07.2013

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


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>).
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Gajdus
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 25.07.2013

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


Return zwraca jeden wynik z pętli, echo wszystkie. Jakieś inne sposoby?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
Gajdus
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 25.07.2013

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


Dzięki za pomoc, metoda zadziałała. Idę poczytać więcej o echo i return.
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 - 02:24