Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]jak uzyskać nazwę funkcji w rekurencji
Forum PHP.pl > Forum > Przedszkole
madrazel
podstawowy problem, mam zwykłą funkcję rekurencyjną i nie chcę mieć problemu kiedy zmienię jej nazwę, moje pytanie: jak odwołać się do funkcji wewnątrz niej samej nie używając jej nazwy ?
wookieb
  1.  
  2. function testowa()
  3. {
  4. $fName=__FUNCTION__;
  5. $fName();
  6. }
madrazel
a nie można bezpośrednio jakoś odwołać się do __FUNCTION__ , lub jakoś tak $__FUNCTION__ bez wprowadzania pomocniczej zmiennej ?, mi wywala takie coś "Fatal error: Function name must be a string" - oczywiście z pomocniczą zmienną działa
erix
  1. ${__FUNCTION__};


edit:err

  1. call_user_func(__FUNCTION__);


~wookieb:
Cytat
oczywiście z pomocniczą zmienną działa
wookieb
Pokaż kod bo mi to działa z pomocniczą zmienną. Innej metody nie znalazłem.

ERIX. Twój kod wywołuje Fatal error: Function name must be a string in
madrazel
Kod
function rekurencja() {
$x = $x+1;
if ($x == 33) return $x;
${__FUNCTION__}();
};

echo rekurencja();


dlaczego mi to nie chodzi ?
Fatal error: Function name must be a string

ani to też:

Kod
function rekurencja() {
$x = $x+1;
if ($x == 33) return $x;
call_user_func(__FUNCTION__);
};

echo rekurencja();
wookieb
  1. function rekurencja() {
  2. $x = $x+1;
  3. if ($x == 33) return $x;
  4. call_user_func(__FUNCTION__);
  5. };
  6.  
  7. echo rekurencja();


To działa tylko, że u ciebie będzie se wykonywać w nieskończoność;

  1. function tester($c=0)
  2. {
  3. if($c>1) return __FUNCTION__;
  4. $c++;
  5. echo call_user_func(__FUNCTION__, $c);
  6.  
  7. }
  8.  
  9. tester(5);

dr_bonzo
Eh, zmieniasz nazwe funkcji to zmien wszystkie jej uzycia i tyle. Skoro mozesz zmienic jej uzycia gdzies POZA nia, to czemu trudniej zmienic jej nazwe wewnatrz tej samej funkcji?
wookieb
Czasem tych wywołań wewnątrz funkcji może być dużo. A skoro jest możliwość wywołania za pomocą takiej metody to zawsze warto znać taką ciekawostkę.
madrazel
Im mniej miejsc gdzie można popełnić błąd tym lepiej. Nawet warto się natrudzić choćby było tylko jedno wywołanie.
Fifi209
Cytat(madrazel @ 12.08.2009, 15:18:55 ) *
Im mniej miejsc gdzie można popełnić błąd tym lepiej. Nawet warto się natrudzić choćby było tylko jedno wywołanie.


Nie powiedziałbym... To jakbyś budował dom aby przespać w nim tylko jedną noc.
dr_bonzo
Cytat
Czasem tych wywołań wewnątrz funkcji może być dużo. A skoro jest możliwość wywołania za pomocą takiej metody to zawsze warto znać taką ciekawostkę.

A o find + replace to slyszales? smile.gif
Wystarczy tylko pamietac ze po zmianie nazwy funkcji trzeba zmienic tez nazwy w uzyciu metody w CALYM projekcie, co jest chyba oczywiste, reszta to tylko find+replace.
erix
Cytat
Im mniej miejsc gdzie można popełnić błąd tym lepiej.

Ale nie takim kosztem.

Znasz regułę KISS/BUZI? Nie? To przyswój.
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.