Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Closures (wyrazenia lambda w PHP), pytanie, czy mozna zadeklarowac parametry
Orzeszekk
post 18.02.2012, 21:08:30
Post #1





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


Witam. Czy jest mozliwosc takiego zadeklarowania funkcji anonimowej aby wymusic na programiscie zadeklarowanie 2 parametrów?


załózmy ze mam taki kod
  1. function funkcja_ktora_uzywa_lambda(Closure $lambda)
  2. {
  3. $i=1;
  4. $j=2;
  5. return $lambda($i, $j);
  6. }
  7. //to uzycie funkcji powyzszej
  8. funkcja_ktora_uzywa_lambda(new function($i,$j) {
  9. return $i+$j;
  10. });


chcialbym wymusic zeby kazdy kto uzyje funkcji_ktora_uzywa_lambda, musial w funkcji anonimowej zadeklarowac te 2 parametry.
głównie chodzi o to zeby uniknąć problemów ze zrobieniem closure ktory nie da parametrów po kilku miesiacach, jak zapomne jak kod działał a bede chcial korzystac z okreslonej funkcjonalnosci którą uzupelnia sie domknieciami.


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
wookieb
post 18.02.2012, 21:11:23
Post #2





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




Nie. Bo dlaczego? Może obsłuży argumenty w kodzie funkcji? func_get_arg


--------------------
Go to the top of the page
+Quote Post
Orzeszekk
post 18.02.2012, 21:30:35
Post #3





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


Cytat(wookieb @ 18.02.2012, 21:11:23 ) *
Nie. Bo dlaczego? Może obsłuży argumenty w kodzie funkcji? func_get_arg


musiala by byc uzyta wewnatrz closure aby odniesc efekt, wiec programista musialby pamietac jakie parametry trzeba bylo dopisac do closure w kolejnym wywolaniu funkcji aby zadzialala. Jesli programista to pamieta to rownie dobrze moze wstawic od razu dobre parametry w deklaracji closure.

czyli jedyną mozliwoscia jest PHPDoc?


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
Crozin
post 18.02.2012, 21:42:29
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Czy nie lepiej będzie skorzystać z "normalnego" interfejsu definiującego jedną publiczną metodę z określonymi parametrami? PHP niestety nie pozwala tworzyć anonimowych/lokalnych instancji klas/interfejsów, więc nieco problematyczne, jednak jednocześnie będzie spełniało Twoje kryteria.
Go to the top of the page
+Quote Post
MLukasz
post 18.02.2012, 21:43:11
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 2
Dołączył: 18.11.2009

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


Spróbuj coś takiego (pisane z głowy)

  1. $reflection = new ReflectionFunction($lambda);
  2. if ($reflection->getNumberOfParameters() < 2)
  3. {
  4. ...
  5. }
Go to the top of the page
+Quote Post
Orzeszekk
post 19.02.2012, 00:47:58
Post #6





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


Cytat(Crozin @ 18.02.2012, 21:42:29 ) *
Czy nie lepiej będzie skorzystać z "normalnego" interfejsu definiującego jedną publiczną metodę z określonymi parametrami? PHP niestety nie pozwala tworzyć anonimowych/lokalnych instancji klas/interfejsów, więc nieco problematyczne, jednak jednocześnie będzie spełniało Twoje kryteria.


closure sa duzo wygodniejsze, nie zasmiecaja kodu klasami ktore zostana uzyte tylko raz, no i trzymają ten kod tam gdzie jest potrzebny, a oddzielna klasa wędruje do innego pliku albo w inne miejsce niekoniecznie blisko jego jedynego uzycia.

ten przyklad z reflection class nie jest zły, ciekawe jak z jego wydajnoscią.


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
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: 12.06.2025 - 19:33