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
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.
Go to the top of the page
+Quote Post
wookieb
post
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
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?
Go to the top of the page
+Quote Post
Crozin
post
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
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
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ą.
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: 24.12.2025 - 19:08