Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obsługa wielu parametrów metod w PHP - użyteczna klasa Params, Bardzo prosta ale użyteczna klasa ułatwiająca życie programisty PHP.
implico
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 16.11.2012
Skąd: Kraków

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


Witajcie ponownie!

Tym razem, w ramach rozbudowy firmowego bloga, chcielibyśmy podzielić się bardzo prostą, ale równie użyteczną klasą pozwalającą na wygodną obsługę parametrów funkcji, które zanadto się "rozrosły".

Przykładowo, przypuśćmy że mamy taką oto funkcję/metodę:

  1. function load(address, async, useCache = false, debug = false, user = NULL, timeout = 0)
  2. {
  3. ...
  4. }


Aby ją wywołać, zamierzając zmienić np. tylko jeden domyślny parametr timeout, musimy przebrnąć przez wszystkie parametry:
  1. load('http://www.implico.pl/', true, false, false, NULL, 100);


Prosiłoby się użycie rozwiązania znanego z JavaScript, gdzie wystarczy przekazać jako jedyny parametr odpowiedni obiekt.

Z pomocą przychodzi nasz klasa Params. Dzięki niej wywołanie ma postać:
  1. load(new Params( array('address' => 'http://www.implico.pl/', 'async' => true, 'timeout' => 100) ));


Więcej o klasie i jej użyciu tutaj:
http://www.implico.pl/klasa_params_wygodna...od_w_php,8.html


P.S. Jeśli istnieje już podobne, być może lepsze rozwiązanie - dajcie znać.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mstraczkowski
post
Post #2





Grupa: Zarejestrowani
Postów: 273
Pomógł: 52
Dołączył: 3.02.2013
Skąd: Przemyśl

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


Konstruktor nie służy do ustawiania nie wiadomo jakiej konfiguracji klasy.

Konstruktor powinien przyjmować tylko parametry, które są niezbędne do utworzenia obiektu danej klasy.
Całą resztę można rozwiązać za pomocą setterów, getterów, właściwości (jeżeli ustawiania mają być elastyczne) lub stałe klasy (jeżeli ustawienia klasy są sztywne)

Jeżeli istnieje coś co musi zostać podane zawsze przy tworzeniu obiektu (aby klasa mogła prawidłowo funkcjonować), to wtedy powinno to stać się parametrem konstruktora. Po to, aby w każdej innej metodzie nie sprawdzać czy ktoś za pomocą settera to ustawił i nie rzucać mu wyjątku.

Jeżeli twoja klasa staje się rozbudowana i ilość setterów / getterów cię przerasta można pomyśleć o osobnej klasie konfiguracyjnej dla danej klasy.
Tak jak przykładowo robi to HTML Purifier

Przykładowo:
  1. $oConfig = HTMLPurifier_Config::createDefault();
  2. $oConfig->set('HTML.TidyLevel', 'heavy');
  3.  
  4. $oPurifier = new HTMLPurifier($oConfig);
  5. $sHtml = $oPurifier->purify($sHtml);


Ten post edytował mstraczkowski 13.02.2013, 12:45:51
Go to the top of the page
+Quote Post

Posty w temacie
- implico   Obsługa wielu parametrów metod w PHP - użyteczna klasa Params   6.02.2013, 06:58:32
- - hind   w czym te rozwiązanie jest lepsze od ValueObject l...   6.02.2013, 07:34:50
- - implico   Sądzę że zgrabniej i szybciej jest zapisać konstru...   6.02.2013, 10:05:03
- - !*!   Takie coś też zapewni automatyczną zmianę parametr...   6.02.2013, 10:23:41
- - nospor   Ale co tu oceniać? Dwie metody na krzyz: set i get...   6.02.2013, 10:48:30
- - pyro   Moim zdaniem cudowanie na siłę. Poczytajcie o zasa...   6.02.2013, 11:58:50
- - nospor   @pyro bo ja nie zakładałem, że coś jest wymagane. ...   6.02.2013, 12:55:52
|- - pyro   Cytat(nospor @ 6.02.2013, 12:55:52 ) ...   6.02.2013, 13:07:50
- - implico   @*!*: takie coś wcale nie zapewni żadnej autom...   6.02.2013, 13:10:24
- - nospor   Cytat@nosporku, sama konstrukcja i pojęcie "f...   6.02.2013, 13:14:13
|- - pyro   Cytat(nospor @ 6.02.2013, 13:12:34 ) ...   6.02.2013, 13:16:08
- - implico   @pyro: Niestety, chyba nie do końca rozumiesz ideę...   6.02.2013, 13:17:56
- - pyro   Może gdzieś popełniłem błąd, bo nie jestem u siebi...   6.02.2013, 13:33:14
- - ano   Czemu nie po prostu: [PHP] pobierz, plaintext func...   6.02.2013, 18:02:19
- - viking   Poza tym można też po prostu http://php.net/manual...   6.02.2013, 18:33:05
- - mstraczkowski   Moim zdaniem już samo pisanie tak wieloparametrowy...   13.02.2013, 03:27:16
- - hind   @mstraczkowski: mówisz o pisaniu klasy, ale co w p...   13.02.2013, 08:46:16
|- - pyro   Cytat(hind @ 13.02.2013, 08:46:16 ) @...   13.02.2013, 08:56:17
- - hind   zawsze można potem użyć kilkunastu setterów, ale z...   13.02.2013, 10:17:33
|- - pyro   Cytat(hind @ 13.02.2013, 10:17:33 ) z...   15.02.2013, 09:40:29
- - mstraczkowski   Konstruktor nie służy do ustawiania nie wiadomo ja...   13.02.2013, 12:19:07
- - ano   ...Lub użyć wzorca stworzonego do rozwiązywania ta...   14.02.2013, 22:48:26


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: 4.10.2025 - 10:24