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