Traits w PHP

Mechanizm Traits(cechy) w PHP został dodany w wersji 5.4 i nie występuje w innych językach programowania. Traitsy zostały zaprojektowane by umożliwić programiście użycie kodu w różnych klasach przez pominięcie ograniczeń jednokrotnego dziedziczenia klas(klasa w PHP może dziedziczyć wyłączznie z jednej klasy).

Trait jest podobna do klasy z tym wyjątkiem, że nie może zostać zainicjowana jako […]

Autor |24 lipca, 2014|Algorytmy, PHP|0 komentarzy

Polimorfizm na przykładzie szyfrowania(Cezar, AES) w PHP

W poprzednim wpisie pisałem o potędze polimorfizmu w programowaniu obiektowym. W tym postaram się podać bardziej przydatny przykład z życia na podstawie szyfrowania tekstu.

Do stworzenia mechanizmu potrzebuje interfejsu Icrypt, który zawiera przydatne metody dla każdego algorytmu szyfrowania np zaszyfruj, odszyfruj itp.
interface ICrypt
{
public function encrypt($plainText);
public function decrypt();
[…]

Autor |3 lipca, 2014|Algorytmy, PHP, Programowanie obiektowe|0 komentarzy

Polimorfizm i programowanie obiektowe

Wielu z Was zapewne zastanawia się dlaczego programowanie obiektowe jest lepsze. Otóż dzięki OOP(object oriented programming) jesteśmy w stanie w bardziej ludzki sposób modelować świat programistyczny. W poniższym przykładzie postaram się przedstawić mechanizm polimorfizmu i korzyści, które daje nam programowanie obiektowe.

Dla celów wpisu utworzę sobie interfejs IVehicle, który będzie opisywał pojazd, klasę abstrakcyjną samochód, […]

Autor |1 lipca, 2014|PHP, Programowanie obiektowe|2 komentarze

Ciąg fibonacciego i przykłady implementacji w PHP

Przed rozwiązaniem problemu ciągu fibonacciego opiszę czym właściwie jest ten ciąg liczb. W ciągu fibonacciego pierwsze dwa wyrazy to 0, 1 a następne są sumą dwóch poprzednich czyli 0, 1, 1, 2, 3, 5, 8, 13 itd. ciąg przedstawia się wzorem

dla:

Fib(0) = 0
Fib(1) =  1

Fib(n) = Fib(n-1) + Fib(n-2)

Ciąg fibonacciego został odkryty w 1202 […]

Autor |28 maja, 2014|Algorytmy, PHP|2 komentarze

Tworzenie pierwszego plugina(wtyczki) do WordPressa

W ostatnim czasie potrzebowałem bardzo prostej wtyczki do WordPressa, która będzie dodawała informacje o Cookie na dole strony. Pomimo tego, że nie znam za bardzo kodu WordPressa postanowiłem napisać plugin. Tworzenie pierwszego plugina(wtyczki) do WordPressa rozpocząłem od studiowania dokumentacji.

Założenia są proste:

Użytkownik może zmodyfikować treść informacji o cookies.
Użytkownik może wybrać styl buttona
Skrypt działa na podstawie JQuery
Możliwa edycja parametrów skryptu w panelu administracyjnym

Po poznaniu dokumentacji tworzenia pluginów wordpressa zacząłem działać. […]

Autor |17 maja, 2014|PHP, Wordpress|3 komentarze

Jak zacząć tworzenie stron internetowych 2/2

W poprzednim artykule pisałem o tworzeniu stron internetowych od strony frontendu, czyli tego co widzi użytkownik. W tym skupię się na stronie backendowej, czyli na tym co dzieje się po stronie serwera www.
Komunikacja przeglądarka-serwer
Na początku musisz uświadomić sobie jak to się dzieje, że użytkownik po wpisaniu adresu otrzymuję stronę. Wszystko odbywa się za pomocą […]

Autor |20 lutego, 2014|PHP, Tworzenie stron internetowych|0 komentarzy

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: […]

Walidacja adresu e-mail w PHP

Jednym z często występujących problemów wśród webmasterów jest walidacja adresu e-mail. W PHP do walidacji danych używana jest funkcja preg_match. Funkcja ta przyjmuje jako pierwszy parametr wyrażenie regularne, natomiast drugi parametr to tekst, który ma zostać sprawdzony. Do większości potrzeb wystarczą proste wyrażenia regularne, jednak jeżeli chcemy być w 100% zgodni ze standardem powinniśmy użyć wyrażenia regularnego, które jest zgodne z RFC

[…]

Autor |10 grudnia, 2013|PHP, Tworzenie stron internetowych|0 komentarzy

Problem plecakowy czyli jak zoptymalizować pakowanie

Podczas pisania stron internetowych, a szczególnie w przypadku pisania sklepu internetowego prędzej czy później trafisz na problem Plecakowy. Czyli jak zoptymalizować pakowanie paczek do jakiegoś pojemnika. Wyobraźmy sobie sytuacje, że tworzymy list przewozowy dla kuriera. Klient w sklepie zamówił towary, które mają różną wagę. Naszym zadaniem jest tak spakować produkty by klient zapłacił jak najmniej za przesyłkę.

Problem plecakowy(ang. discrete knapsack problem) jest jednym z najczęściej występujących problemów optymalizacyjnych, przy którym należy wykorzystać algorytmy zachłanne.

Problem plecakowy czyli jak zoptymalizować pakowanie:

 Przy podanym zbiorze elementów o podanej wadze i wartości, należy wybrać taki podzbiór by suma wartości była możliwie jak największa, a suma wag była nie większa od danej pojemności plecaka.

Jak to zrobić? 

Najlepszym rozwiązaniem jest posortowanie paczek po wadze i pakowanie ich do plecaka od najcięzszej do najlżejszej. W przypadku braku miejsca, bierzemy nowy plecak.

 

Rozwiązanie problemu w PHP – kod obiektowy

[…]

Autor |5 grudnia, 2013|Algorytmy, PHP, Tworzenie stron internetowych|0 komentarzy

Tworzenie stron internetowych w modelu MVC

MVC jest to model programistyczny dzielący aplikację na trzy warstwy: model, widok(view) oraz kontroler(controller).

Model jest to warstwa odpowiadająca za obliczenia. Dzięki plikom modelów, możemy pobrać informacje z plików, bazy danych oraz odpowiednio je przetworzyć.

Widok jest warstwą prezentacji, dzięki której użytkownik może zobaczyć efekt działania aplikacji. W przypadku stron internetowych są to zazwyczaj pliki html.

Kontroler jest to warstwa, która łączy widok z modelem. Kontroler ma akcje, które są wywoływane na podstawie odpowiednich parametrów podanych przez użytkownika np. adres strony internetowej.
Praktyczne użycie wzorca MVC
Wyobraźmy sobie sytuacje, gdzie użytkownik wchodzi na stronę internetową pod adresem „http://rpodwika.pl/pliki/pobierzplik/id/3” co się wtedy dzieje?

Podczas wywołania tego adresu kontroller wie, że musi przekazać działanie kontrolerowi „pliki” a następnie wywołać akcje „pobierzplik” i przekazać parametr „id” o wartości „3”. Następnie w tej akcji tworzymy nowy obiekt modelu, który na podstawie wartości 3 zwróci odpowiednie dane, które zostaną wyświetlone za pomocą widoku „pliki/pobierzplik.html”

[…]

Autor |2 grudnia, 2013|PHP, Tworzenie stron internetowych|2 komentarze

Jak bezpiecznie przechowywać hasła w PHP

Przechowywanie haseł użytkowników określa w jaki sposób dbamy o ich bezpieczeństwo. Powszechna praktyka to używanie funkcji skrótu, które tworzą skrót hasła wprowadzonego przez użytkownika, który w teorii jest nieodwracalny(nie można ze skrótu uzyskać hasła). W praktyce jednak istnieją tak zwane tęczowe tablice(ang. rainbow tables), które w dość szybki sposób z wprowadzonego hasha(rezultat funkcji skrótu) odszukują w bazie hasło. Nasuwa się więc pytanie jak w poprawny sposób zabezpieczyć hasła użytkowników.
Czego nie należy robić by bezpiecznie przechowywać hasła w PHP

Nigdy nie określaj limitu znaków w haśle
Nie określaj znaków, które pojawiają się w haśle. Jeśli ktoś chce mieć $%#$ w haśle pozwól mu na to
Nigdy nie zapisuj haseł, które nie są zaszyfrowane/zahashowane
Nie zapisuj haseł używając funkcji MD5() oraz SHA1() gdyż w dzisiejszym świecie nie są bezpieczne z uwagi na moc obliczeniową komputerów, klastrów itp.
Nie wysyłaj haseł do użytkowników e-mailem(np podczas rejestracji)
W przypadku wykrycia ataku wymuś zmianę hasła dla wszystkich użytkowników przed ponownym zalogowaniem się do systemu

[…]

Autor |28 listopada, 2013|PHP|0 komentarzy

Jak zapobiec SQL Injection w PHP

Czym jest SQL Injection?
Z języka angielskiego jest to wstrzyknięcie kodu SQL do programu/skryptu/aplikacji. Program, skrypt, strona, które nie są odporne na ataki SQL Injection stwarzają ogromne ryzko dla użytkownika oraz dla samego systemu. Poprzez SQL Injection atakujący może uzyskać dostęp do naszej bazy danych, modyfikować ją, a nawet usunąć.
Jak wygląda atak SQL injection?
Prześledzmy poniższy kod PHP
$name = $_GET['name'];
mysql_query("SELECT * FROM `uzytkownicy` WHERE `imie` = $name");
parametr $name pobierany jest bezpośrednio z adresu URL, programista zakłada, że użytkownik zawsze wprowadzi imię. Jest to błędne podejście! Co w przypadku gdy ktoś wprowadzi poniższy ciąg znaków?
'Robert'; DELETE * FROM uzytkownicy
Wtedy zapytanie MySQL będzie wyglądało tak:
SELECT * FROM `uzytkownicy` WHERE `imie` = 'Robert'; DELETE * FROM uzytkownicy
Czyli po wykonaniu zapytania SELECT zostaną usunięte wszystkie rekordy z tabeli uzytkownicy!
[…]

Autor |28 listopada, 2013|PHP, Tworzenie stron internetowych|0 komentarzy

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