Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]opertor "kropki" + dołączenie funkcji, czy to możliwe?
Forum PHP.pl > Forum > Przedszkole
siemieng
witam,

mam taki problem z kodem, mianowicie tworząc pewien skrypt php wykorzystuję do niego funkcje, i pojawia się następujący problem przy próbie dołączenia wywołania funkcji przy pomocy kropki:

  1. <?
  2. [b]function xxx()[/b] { //przykladowa funkcja 1
  3.    for ($i=1; $i<=10; $i++) {echo 'proba'.$i;}
  4. }
  5.  
  6. [b]function dll0001()[/b] {//funckja 2 odpowiadajaca za wyswietlanie + proba wywolania funkcji xxx()
  7.  
  8. $toprint = '<div class="absolute">';
  9.    $toprint .= '<div class="divl0_dll0001menu">';
  10.        $toprint .= '<div class="divl1_dll0001menu_options">';
  11.            [b]$toprint .= ''. xxx().'';[/b]
  12.        $toprint .= '</div>';
  13.        $toprint .= '<div class="divl1_dll0001menu_line">';
  14.        $toprint .= '</div>';
  15.        $toprint .= '<div class="divl1_dll0001menu_bot">';
  16.            $toprint .= '<div class="divl2_dll0001menu_ppl">';
  17.                $toprint .= '';
  18.            $toprint .= '</div>';
  19.        $toprint .= '</div>';
  20.    $toprint .= '</div>';
  21. $toprint .= '</div>';
  22.  
  23. return $toprint;
  24. }
  25.  
  26. echo dll0001();
  27. ?>


W tej sytuacji wszystko się wykona (wykona się funkcja xxx i zostanie wyświetlona 2 funkcja), tyle że nie w dziwnej kolejności - wywołanie funkcji xxx() nastąpi na "początku funkcji dll0001(), po tym zostanie wykonana (wyświetlona) pozostała część funkcji dll0001().

tak wygląda fragment źródła strony z tym kodem:
proba1proba2proba3proba4proba5proba6proba7proba8proba9proba10<div class="absolute"><div class="divl0_dll0001menu">..........

Wiem, że da się to rozwiązać w sposób:
  1. <?
  2. [b]function xxx()[/b] { //przykladowa funkcja 1
  3.    for ($i=1; $i<=10; $i++) {echo 'proba'.$i;}
  4. }
  5.  
  6. [b]function dll0001()[/b] {//funckja 2 odpowiadajaca za wyswietlanie + proba wywolania funkcji xxx()
  7. ?>
  8. <div class="absolute">
  9. <div class="divl0_dll0001menu">
  10. <div class="divl1_dll0001menu_options">
  11.            <?php  xxx(); ?>
  12. </div>
  13. <div class="divl1_dll0001menu_line">
  14. </div>
  15. <div class="divl1_dll0001menu_bot">
  16. <div class="divl2_dll0001menu_ppl">
  17. </div>
  18. </div>
  19. </div>
  20. </div>
  21. <?
  22. }
  23.  
  24. echo dll0001();
  25. ?>


Ale z ciekawości i na przyszłość, czy może ktoś wie czy da się przy pomocy kropki wywołać funkcję?questionmark.gifquestionmark.gifquestionmark.gif?
nevt
zastanów się chwilę nad tym co napisałeś. operator 'kropki' nie ma tu nic do rzeczy...

w funkcji xxx() przesyłasz rezultaty bezpośrednio do przeglądarki (echo ...)
a w funkcji dll0001() składasz rezultat i zwracasz dopiero na końcu funkcji...
twój kod dział dokładnie tak jak go napisałeś i w tym działaniu nie ma niczego szczególnego...

wytłumaczę po kolei:
1. echo dll0001(); następuje wywołanie funkcji dll001()
2. w tej funkcji składasz sobie ciąg $toPrint.
3. w pewnym momencie następuje wywołanie funkcji xxx()
4. w niej masz polecenie echo - wynik leci od razu do przeglądarki (a nie do $toPrint)
5. dopiero na końcu wyświetla się zawartość $toPrint

popraw funkcję xxx() na:
  1. <?php
  2. function xxx()
  3. {
  4.  $result = '';
  5.   for ($i=1; $i<=10; $i++)
  6.    $result .=  'proba'.$i;
  7.  return $result;
  8. }
  9. ?>

i będzie śmigać tak, jak potrzebujesz...
siemieng
"nevt" dzięki wielkie, rzeczywiście nie pomyślałem, kojarzyłem to z operatorem kropki, a tu zwykły brak info o wywoływaniu funkcji w funkcji, dzięki
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.