Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Closures (wyrazenia lambda w PHP), pytanie
Forum PHP.pl > Forum > PHP > Object-oriented programming
Orzeszekk
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.
wookieb
Nie. Bo dlaczego? Może obsłuży argumenty w kodzie funkcji? func_get_arg
Orzeszekk
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?
Crozin
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.
MLukasz
Spróbuj coś takiego (pisane z głowy)

  1. $reflection = new ReflectionFunction($lambda);
  2. if ($reflection->getNumberOfParameters() < 2)
  3. {
  4. ...
  5. }
Orzeszekk
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ą.
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.