Wzorzec Pośrednik (Proxy) w PHP

Kolejnym wzorcem projektowym, który omówię jest wzorzec Pośrednik (Proxy). Jest to wzorzec z grupy wzorców behawioralnych. Proxy jest wzorcem, który zastępuje obiekt o tym samym interfejsie i przed otrzymaniem dostępu do obiektu wykonuje się jakaś logika. Do czego może być użyty?

Najpopularniejszym użyciem proxy jest ograniczenie dostępu do kosztownych obiektów do momentu kiedy one są potrzebne. Jest to dość dobrze opisane w Internecie więc pominę to użycie.
Innym przykładem użycia proxy jest zabezpieczenie obiektu przed nieautoryzowanym dostępem.
Kolejna sytuacja kiedy możemy użyć pośrednika to inna reprezentacja obiektu w zależności od określonych warunków, wyobraź sobie, że masz obiekt ProxyRepository i w zależności od pewnych warunków chcesz, aby dane były pobierane albo z MySQL, albo MongoDB. Proxy to umożliwia. ’

Podsumowując Proxy przekierowuje żądania do oryginalnego obiektu wtedy, kiedy powinny być przekierowane, a warunki zależą od typu Proxy. […]

Najczęstsze błędy początkujących programistów PHP

PHP jest językiem, którego opanowanie w stopniu podstawowym nie jest trudne, jednakże ma to swoje konsekwencje w tym, że początkujący programiści, często idąc na łatwizne piszą kod, który nie jest najwyższej jakości. Często winą tego są poradniki z czasów kiedy wiądącym trendem było PHP 3-4. Te poradniki mają się ni jak do rzeczywistości programistycznej […]

PHP Wzorce Projektowe

Niedawno postanowiłem stworzyć bibliotekę na githubie z wzorcami projektowymi w PHP. Sukcesywnie dodaje tam nowe wzorce wraz z testami, które w momencie pisania tego posta stanowią 91% pokrycia kodu. Jeśli chcesz zostać dobrym programistą i pisać kod, który jest zdatny do ponownego użycia zamknięty na modyfikację, ale łatwy do rozszerzenia pownieneś zacząć interesować się wzorcami […]

Dlaczego przekonałem się do Symfony2

Podczas swojej kariery programistycznej pracowałem z wieloma róznymi frameworkami w PHP od autorskich po zenda, phalcona, kohane. Obecnie pracuję przy projekcie prowadzonym na Symfony2. Długo nie mogłem się przekonać bo wydawało mi się, że Symfony2 to ogromny framework i będę musiał spędzić dużo czasu na poznanie go. Mając doświadczenia z czytania dokumentacji innych frameworków […]

Obserwator w PHP

Jak pisałem w poprzednich postach, programowanie obiektowe wiąże się ściśle z pewnymi praktykami i wzorcami, które ułatwiają rozwiązywanie problemów napotykanych przez programistów. W poprzednich wpisach opisywałem wzorce kreacyjne, czyli takie, które odpowiadały za tworzenie obiektów. W tym wpisie opiszę wzorzec behawioralny. Wzorce behawioralne opisują relację pomiędzy obiektami oraz ich zachowania.
Wzorzec obserwator w PHP
Wzorzec obserwatora(ang. Observer pattern) odpowiedzialny jest za powiadamianie obiektu A o zmianie stanu obiektu B. Mówiąc ludzkim językiem, gdy coś się wydarzy w obiekcie A to informuje on obiekt B o tym, a obiekt B reaguje odpowiednio na to wydarzenie. Obiekt A jest nazywany „obserwowanym”, a obiekt B jest „obserwatorem”.

Na diagramie wygląda to tak:

W przykładzie, który przedstawię Subject to obiekt obserwowany, a ConreteObserver to klasy implementujące interfejs Observer.
interface Observer{
public function update(Observable $observable);
}
Zawiera deklarację metody update, która jest wywoływana w obiekcie obserwującym podczas zmiany stanu obserwatora.

[…]

Wzorzec Fabryka(Factory) w PHP

Fabryka jest bardzo popularnym kreacyjnym wzorcem projektowania aplikacji. W tym wzorcu klasa odpowiada, za tworzenie obiektu, który chcesz użyć. Wyobraźmy sobie to na przykładzie fabryki samochodów. Jesteśmy sprzedawcą i składamy zamówienie na Mercedesa klasy C i taka fabryka nam wyprodukuje taki samochód.

Prześledźmy poniższy kod obrazujący powyżej opisane przeze mnie zdarzenie.
<?php

interface […]

Wzorzec Rejestr(Registry) w PHP

Czym jest wzorzec Rejestr(Registry) i kiedy może się nam przydać?

Wzorzec Rejestru jest przydatny gdy chcemy mieć globalny dostęp do obiektów znajdujących się w jednym miejscu.  Jaka jest więc różnica pomiędzy Rejestrem, a zastosowaniem zmiennych globalnych? Otóż dzięki użyciu Rejestru mamy kontrole nad dostępem do obiektów. Podstawowymi metodami rejestru będą metody rejestrujące obiekt oraz pobierające go. Można jeszcze, a wręcz powinno się dodać metodę, która wyrejestruje obiekt, ale w tym prostym przykładzie to pominę. Rejestracja obiektu i jego pobieranie zostaną zaimplementowane poprzez funkcje magiczne __get() oraz __set(). Są to funkcje wywoływane w klasie w momencie kiedy próbujemy dostać się do nieistniejącej zmiennej w klasie. Na potrzeby rejestru, stworzyłem 3 proste klasy o nazwach A, B i C, których zadaniem jest coś wyświetlić.
 Implementacja wzorca Rejestru w PHP
class A
{
public function sayA()
{
echo 'a';
}
}
class B
{
public function sayB()
{
echo 'b';
}
}
class C
{
public function sayC()
{
echo 'C';
}
}
Następnie przechodzę do tworzenia rejestru. W poprzednim artykule opisywałem wzorzec Singleton, z którego teraz skorzystam. Ponadto będzie nam potrzebna tablica, która przechowa obiekty w rejestrze. Tablica zadeklarowana jest jako static ponieważ potrzebujemy wyłącznie jednej tablicy.

Najważniejszymi metodami są metody __get oraz __set, które odpowiadają za rejestrację obiektu i jego pobranie.

Metoda __get() sprawdza czy obiekt istnieje w rejestrze i jeśli tak to go zwraca, a jeżeli nie istnieje to wyrzuca wyjątek, że obiekt nie istnieje.

Metoda __set() zapisuje obiekt($value) w rejestrze pod nazwą $object. W tej metodzie powinniśmy dodać sprawdzanie czy obiekt już istnieje w tablicy, na podobnej zasadzie jak w metodzie __get(), ale w tym prostym przykładzie to pominę.
Implementacja klasy Rejestr w PHP
[…]

Autor |16 grudnia, 2013|PHP, Wzorce projektowe|0 komentarzy

Wzorzec Singleton w PHP

Wzorzec singleton-a przez wiele osób uważany jest jako antywzorzec ponieważ bardzo często jest nadużywany i niektórym osobom zastępuje użycie zmiennych globalnych. Jednakże są sytuacje, w których warto użyć singletona. Na przykład gdy chcemy pobrać połączenie z bazą danych w ciele funkcji, a nie chcemy dodawać kolejnego argumentu do funkcji.

Przykład singletona dla bazy danych:
<?php

class Database
{
private static $instance;

public static function getInstance()
{
if(self::$instance == null) self::$instance = new Database();

return self::$instance;
}

private function __construct Database(){
//polacz z bazą tutaj

}

}
Pierwszą rzeczą która powinna się rzucić w oczy jest prywatny konstruktor. W programowaniu prywatny konstruktor może być użyty tylko wewnątrz klasy, czyli tworzymy obiekt klasy w niej samej. Następnie zwróć uwagę na obiekt $instance oraz na metodę getInstance();

Obiekt $instance służy nam do przechowywania instancji klasy, natomiast metoda getInstance() w przypadku gdy nie ma instancji to tworzy ją, a jeżeli jest to ją zwraca. Słowo static gwarantuje nam to, że w czasie trwania programu/aplikacji będziemy mieli utworzoną wyłącznie jedną instancję klasy Database.

Przykład użycia: […]


Warning: Use of undefined constant XML - assumed 'XML' (this will throw an Error in a future version of PHP) in /wp-content/plugins/wp-syntaxhighlighter/wp-syntaxhighlighter.php on line 1048