Pokazywanie postów oznaczonych etykietą PHP_zaawansowane. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą PHP_zaawansowane. Pokaż wszystkie posty

środa, 18 stycznia 2017

[PHP][OOP] Abstrakcja, interfejsy i wzorzec Factory

TRUE
4704597062652094618
Aktualizacja: 20.01.2017 15:00. Większość początkujących w programowaniu obiektowym programistów ma problemy ze zrozumieniem w jaki sposób prawidłowo wykorzystywać mechanizmy takie jak dziedziczenie, abstrakcje i interfejsy. Różne tutoriale, czy poradniki dostępne w sieci nie ułatwiają tego, gdyż zwykle opisują one jedynie zasadę działania tych mechanizmów, bez pokazania praktycznego tego zastosowania - do takiej wiedzy trzeba już sięgnąć do książek, ale i te nierzadko traktują sprawę po macoszemu. O ile koncepcja tego wszystkiego jest prosta, to dużo ludzi ma na początku problemy z wyczuciem tego w jaki sposób prawidłowo wykorzystywać to w praktyce. Początkujący programiści jedynie wiedzą, że takie coś jest, ale nie bardzo są w stanie zrozumieć, do czego to wszystko tak naprawdę może posłużyć. W tym artykule przeanalizujemy sobie więc do czego tak naprawdę użyć tych wszystkich mechanizmów i sprawimy, że słowo abstrakcja nie będzie się już kojarzyć nikomu z żadną czarną magią, tudzież z czymś trudnym do zrozumienia. Dzisiaj zaprzyjaźnimy się z ową abstrakcją..

Czym tak naprawdę jest abstrakcja?

Na pewno wiecie, czym są klasy abstrakcyjne, a przynajmniej jak takie klasy definiujemy. Jak wiadomo klasy abstrakcyjne definiujemy za pomocą abstract class, następnie podajemy w definicji klasy metody abstrakcyjne, które będą musiały zostać pokryte we wszystkich (tym razem już nie-abstrakcyjnych) klasach dziedziczących po naszej nadrzędnej abstrakcyjnej klasie. Czym więc tutaj jest ta magiczna abstrakcja? Otóż wymusza ona niejako na wszystkich klasach potomnych utworzenie dokładnie takich metod, jakie w klasie bazowej (tej abstrakcyjnej) zostały określone. Klasa abstrakcyjna sama w sobie nie posiada definicji tychże metod, posiada jedynie ich deklaracje. Możemy więc powiedzieć, że do momentu utworzenia tych metod w klasach potomnych (dziedziczących) wszystkie te metody tak naprawdę nie istnieją, istnieją jedynie abstrakcyjnie. Niby są, a jednak jeszcze ich nie ma, gdyż istnieje dopiero póki co ich deklaracja, że takowe prawdopodobnie się gdzieś dalej w kodzie pojawią. Tym właśnie jest abstrakcja.

Przyjrzyjmy się najprostrzej klasie abstrakcyjnej:
[code]
<?php
abstract class AbstractHuman {

  // kod
}
[/code]

środa, 27 maja 2015

[PHP] Funkcje anonimowe i callback

TRUE
2147216564926567225
Funkcje anonimowe i związane z nimi funkcje zwrotne (tzw. callback) to bardzo praktyczny mechanizm pozwalający na tworzenie bardzo ciekawych rozwiązań. Są wykorzystywane w wielu funkcjach wbudowanych w PHP, możemy też je wykorzystywać do budowania własnych tego typu rozwiązań. Trzeba bowiem wiedzieć, że jako argumenty do danej funkcji możemy w PHP przekazywać nie tylko zwykłe typy takie jak obiekty klas, zmienne, czy tablice, ale również i funkcje.

Co więcej - funkcje podane jako argument mogą operować na danych zwróconych przez funkcję wywoływaną - nazywamy je wtedy funkcjami zwrotnymi, tzw. callbackami. Oczywiście nic nie stoi na przeszkodzie, aby wszystko działało o wiele bardziej skomplikowanie - funkcja zwrotna może np. odbierać wynik, przetwarzać go, a następnie ponownie przekazywać do funkcji bazowej. W tym artykule dowiemy się w jaki sposób w PHP można deklarować tego typu funkcje oraz zobaczymy na przykładzie w jaki praktyczny sposób można to rozwiązanie wykorzystać.

function()

Funkcja anonimowa może zostać zadeklarowana na dwa sposoby, na początek poznamy pierwszy sposób. Nie musi ona posiadać swojej nazwy, można ją jednak przypisać do zmiennej i używać zmiennej tak jakby była zwykłą funkcją.
Składnia taka moze powodować zdziwienie na pierwszy rzut oka, ale po zrozumieniu mechanizmu nie będzie w niej dla nas niczego dziwnego. Zdeklarujmy więc naszą pierwszą anonimową funkcję, przypisując ją do zmiennej:
[code]
<?php
$myFunction = function() {
  echo 'This is myFunction.<br />';
};
?>
[/code]

niedziela, 24 maja 2015

[PHP] Namespaces - przestrzenie nazw w PHP

TRUE
2394048099834356901
Zapewne spotkaliśmy się już z dziwnie wyglądającymi nazwami klas w PHP, np. podczas pracy z trochę bardziej rozbudowanymi webaplikacjami. Przykładowa nazwa jakiejś klasy mogła wyglądać np. tak: Bundle\HelloBundle\Controller\HelloController. Nie ma tu jednak żadnej pokręconej magii, a jedynie przestrzeń nazw. Klasa w tym przypadku ma jak najbardziej normalną nazwę HelloController, a wszystko to co znajduje się przed jej nazwą to przestrzeń nazw w jakiej się ona zawiera.
Korzystanie z przestrzeni nazw znacznie usprawnia pracę z kodem, a także eliminuje problem kolizji, gdzie dwie klasy mogą mieć identyczne nazwy. Przestrzenie nazw pozwalają również na stworzenie bardzo logicznej i przejrzystej hierarchi naszego kodu. W tym krótkim tutorialu dowiemy się czym są i jak  poprawnie używać przestrzeni nazw w PHP.

Funkcjonalność ta niczym nie różni się od tego samego rozwiązania stosowanego od zarania dziejów w językach takich jak C, czy Java. Przestrzenie nazw w PHP zostały dodane dość późno, bo dopiero w wersji 5.3.

Przestrzeń globalna

Jest główną przestrzenią nazw. Zauważmy, że bardzo często piszemy sobie jakieś klasy, czy też funkcje, bądź też korzystamy z tych wbudowanych w silnik PHP. Korzystamy np. z funkcji header() służacej do ustawienia nagłówka, funkcji strip_tags() służącej do obcięcia tagów HTML i wielu innych. Nazewnictwo tych funkcji jest proste i składa się z jednego członu określającego nazwę funkcji. Funkcje takie istnieją w domyślnej przestrzeni nazw i są dostępne wszędzie w naszym kodzie.

Podobnie jest z klasami, ich metodami i właściwościami. Nie wymagają poprzedzania ich nazwy nazwą przestrzeni w jakiej występują, gdyż globalna przestrzeń jest tą domyślną, bazową. Wyobraźmy sobie teraz, że tworzymy własną klasę, np. niech to będzie klasa o nazwie:
[code]MyClass {}[/code]
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji