Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: funkcja rekurencyjna i przekazywanie wyniku przez referencje
Forum PHP.pl > Forum > PHP
nowy_pehapowiec
Jak w funkcji rekurencyjnej przekazywać wynik przez referencje? Cały czas dostaje ostrzeżenie: Call-time pass-by-reference has been deprecated

Mam funkcje rekurencyjną, która pobiera zmienną z tablicą i w odpowiendi sposób tworzy zagnieżdżoną listę html. Czyli dodaje gnieniegdzie <ul>, <li>, <a> i tego typu teksty. Jeśli w funkcji jest echo to wszystko wyświetla się bez przeszkód. No ale ja chciałbym z tego echo zrezygnować i cały wynik zwrócić jako zmienną i dlatego dodałem referencje. Jak można to poprawićquestionmark.gif
Funckja wygląda jakoś tak:
function ff( $z1, $z2, $z3, &$wynik = '' )
{
$wynik = $wynik . '<ul>';
/*jakiś kod*/
ff( $z1, $z2, $z3, &$wynik );
$wynik = $wynik . '</ul>';
return $wynik;
}

Czemu to nie chce dobrze działać? A może jest jakiś inny sposób na uniknięcie echo w środku funkcji?

pozdro
Fifi209
Nie możesz robić tak:
  1. ff( $z1, $z2, $z3, &$wynik );


To argumenty funkcji określą czy to będzie referencja. winksmiley.jpg

Poza tym zobacz co ta funkcja robi:

Funkcja ff

Start
Uruchom ff
Stop


I tak w nieskończoność.
nowy_pehapowiec
fifi209 problem w tym, że ta funkcja ma zamieniać drzewko sql na listę.

Jeśli nie daje w wywołaniu funkcji referencji do wyniku, to przy przechodzeniu przez kolejne gałęzie drzewka tracę wynik.
Mas jakiś pomysł jak to obejść?, tak aby dodawać tagi hmtl do jakiegoś łańcucha a nie od razu je wyświetlać?

pozdro
Fifi209
Coś takiego:

  1. <?php
  2.  
  3.  
  4. function test(&$text, &$x) {
  5. static $string;
  6. if ($x > 0) {
  7. $string .= ' '.$text;
  8. $x--;
  9. test($text, $x);
  10. }
  11.  
  12. return $string;
  13. }
  14.  
  15. $str = 'tekst';
  16. $x = 12;
  17.  
  18. echo test($str, $x);
  19.  
  20. ?>

?
230005
No ale toć przecież jak to string ma być ta zmienna wynikowa, to czemu nie możesz po prostu łączyć za pomocą kropki? O tak: . smile.gif Referencja tam ci nigdzie nie jest potrzebna.
nowy_pehapowiec
wystarczyło wstawić: $wynik = ff( $z1, $z2, $z3, $wynik );

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.