Wzorce projektowe, cz. 4 Property
Property to wzorzec projektowy, którego zadanie, jest przechowywać i udostępniać dane w obrębie aplikacji. Implementacja wzorca zastępuje globalne zmienne jakże nielubiane w dobie programowania obiektowego. Brzmi znajomo? Wzorzec ten ma zbliżone zastosowania do Singletona. Jednak tu nie tworzymy obiektu – wszystkie metody są statyczne.

Diagram klas wzorca Property
Wszystkie dane trzymamy w tablicy array. Za pomocą metod set() i get() możemy ustawiać/pobierać dane. Poza tym możemy zaimplementować inne metody kontrolujące np. dostęp do zmiennych.
Przykładowa implementacja
<?php class Property{ private static $array = array(); public static function set($name, $value) { self::$array[$name]=$value; } public static function get($name) { return self::$array[$name]; } public static function exist($name) { return isset(self::$array[$name]); } } //testy Property::set("nazwa1", 1); Property::set("nazwa2", "wartosc"); echo Property::get("nazwa2"); // wyswietli "wartosc" echo Property::exist("nazwa1"); // wyswietli "true" echo Property::exist("nazwa3"); // wyswietli "false" ?>
Przykład z życia wzięty
Rozważmy klasę zawierającą konfigurację aplikacji.
<?php class Config{ private static $conf = array(); public static function set($name, $value) { self::$conf[$name]=$value; } public static function get($name) { return self::$conf[$name]; } public static function exist($name) { return isset(self::$conf[$name]); } } //testy Config::set("language", "pl"); Config::set("path", "/jakas_sciezka/"); echo Config::get("language"); // wyswietli "pl" echo Config::get("path"); // wyswietli "/jakas_sciezka/" echo Config::exist("language"); // wyswietli "true" ?>
Klasa Config zawiera tablicę conf z podstawowymi ustawieniami aplikacji. Dzięki zastosowaniu pola statycznego zmiana ustawień w jednym miejscu (np. zmiana języka na stronie przez użytkownika) jest „widoczna” w każdym miejscu aplikacji.
Zalety i wady
Zalety:
- Globalny dostęp do zmiennych wraz z dobrodziejstwami jakie daje programowanie obiektowe.
- Wygodne API do ustawiania/pobierania danych, które muszą mieć dostęp globalny.
Wady:
- Nie znam żadnej :)
Zastosowanie
Property można wykorzystać do przechowywania konfiguracji aplikacji.