Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]jak uzyskać nazwę funkcji w rekurencji
madrazel
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 21.08.2008

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


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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1.  
  2. function testowa()
  3. {
  4. $fName=__FUNCTION__;
  5. $fName();
  6. }
Go to the top of the page
+Quote Post
madrazel
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 21.08.2008

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


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





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. ${__FUNCTION__};


edit:err

  1. call_user_func(__FUNCTION__);


~wookieb:
Cytat
oczywiście z pomocniczą zmienną działa
Go to the top of the page
+Quote Post
wookieb
post
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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

Ten post edytował wookieb 12.08.2009, 14:09:36
Go to the top of the page
+Quote Post
madrazel
post
Post #6





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 21.08.2008

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


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();


Ten post edytował madrazel 12.08.2009, 14:22:44
Go to the top of the page
+Quote Post
wookieb
post
Post #7





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  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);

Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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?
Go to the top of the page
+Quote Post
wookieb
post
Post #9





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 21.08.2008

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


Im mniej miejsc gdzie można popełnić błąd tym lepiej. Nawet warto się natrudzić choćby było tylko jedno wywołanie.
Go to the top of the page
+Quote Post
Fifi209
post
Post #11





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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? (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
erix
post
Post #13





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.
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: 22.08.2025 - 23:46