Klasa Params. Wygodna obsługa wielu parametrów metod w PHP

W praktyce programowania w PHP często zdarza się, że wraz z rozbudową funkcjonalności liczba parametrów metod czy zwykłych funkcji wzrasta w sposób "niekontrolowany". Zmniejsza to przejrzystość kodu - wywołania stają się skomplikowane i nieczytelne.

Przykładowy kod ilustrujący problem:

//definicja funkcji
function load(address, async, useCache = false, debug = false, user = NULL, timeout = 0)
{
    ...
}

//nieczytelne wywołanie funkcji z dużą liczbą parametrów
load('http://www.implico.pl/', true, false, false, NULL, 100);

Co gorsza, w powyższym przykładzie zamierzaliśmy zmienić jedynie parametry address, async i timeout, pozostałym pozostawiając wartości domyślne.

W języku JavaScript rozwiązanie jest proste - stosujemy obiekt, który przekazujemy jako parametr funkcji, np.

load( { address : 'http://www.implico.pl/', async : true, timeout : 100 }

W jaki sposób osiągnąć powyższe, eleganckie rozwiązanie w przypadku PHP? Z pomocą przychodzi prosta, ale funkcjonalna, opracowana przez nas klasa Params.

Wywołanie

Aby wywołać funkcję z poprzedniego przykładu z użyciem naszej klasy, do funkcji przekazujemy jako jedyny parametr obiekt klasy Params, którego konstruktor przyjmuje jako argument tablicę klucz (zmienna)-wartość:

load(new Params( array('address' => 'http://www.implico.pl/', 'async' => true, 'timeout' => 100) ));

Podajemy jednie parametry, które zostały zdefiniowane jako wymagane (patrz poniżej) lub te opcjonalne, których wartość domyślną zamierzamy zmienić.

Odbiór argumentów

Aby poprawnie przetworzyć dane, funkcja powinna zdefiniować przyjmowane argumenty, z podziałem na wymagane i opcjonalne:

function load($par)
{
   //wywolanie metody ustawiajacej argumenty wymagane i opcjonalne
   $par->setParams(

      //argumenty wymagane
      array(
         'address',
         'async'
      ),

      //argumenty opcjonalne, para nazwa-wartość domyślna
      array(
         'useCache' => false,
         'debug' => false,
         'user' => NULL,
         'timeout' => 0
      )
   );
  
   //przykladowe wyswietlenie wartosci jednego z argumentow
   echo $par->get('address');
   ...
}

W przypadku niepodania jednego z parametrów wymaganych, generowany jest błąd E_USER_ERROR.

Specyfikacja metod

Klasa zapewnia 5 metod:

  • __construct($a) - tworzy obiekt klasy Params, uzupełniając przekazane jako tablica klucz-wartość parametry
  • setParams($obligatory, $additional) - ustawia argumenty funkcji jako wymagane i opcjonalne (tablice klucz-wartość)
  • set($params, $value=NULL) - ustawia wartość podanego parametru. 2 warianty: $params jest tablicą klucz-wartość lub $params jest zmienną typu String (nazwa parametru), a $value jego wartością.
  • get($i) - zwraca wartość parametru o podanej nazwie
  • getClone($a = array()) - zwraca kopię obiektu, uzupełniając parametry podanymi wartościami (tablica klucz-wartość)

Licencja

Klasa jest publikowana na zasadach licencji MIT.

Do pobrania

Plik params.inc.php.zip oraz powyższy przykład

 

All rights reserved © 2024 by implico.pl

Change language: en