Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]opertor "kropki" + dołączenie funkcji, czy to możliwe?
siemieng
post 4.11.2008, 00:11:55
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 7
Dołączył: 16.01.2007

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


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?
Go to the top of the page
+Quote Post
nevt
post 4.11.2008, 08:49:12
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


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...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
siemieng
post 4.11.2008, 09:32:42
Post #3





Grupa: Zarejestrowani
Postów: 101
Pomógł: 7
Dołączył: 16.01.2007

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


"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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 16:27