Programowanie zorientowane obiektowo – php
OOP (ang. Object-Oriented Programming) – programowanie zorientowane obiektowo
Proceduralny php od obiektowego różni się tym, że w proceduralnym php wszystkie elementy mamy w jednym pliku, zapisane jedno pod drugim. W obiektowym php główny plik zawiera odwołania do plików, w których osobno występują jego składowe.
Kolejnym elementem Obiektowego php jest kategoryzowanie tasków wewnątrz osobnych class. Dzięki czemu możemy je używać nie zależnie od siebie.
Design patterns w OOP
najbardziej popularny jest model MVC którego akronim to skrót od pierwszych liter:
- model
- view
- controller
W pliku model zamieszczamy class, która zawiera np. wszystkie odwołania do bazy danych,
Plik view zamieszczamy class, która zawiera metody pozwalające na wyświetlenie danych użytkownikowi na stronie
Plik controller zamieszczamy class, która zawiera metody pozwalające zmienić lub dodać dane do bazy danych, ale bez bezpośredniego połączenia z bazą danych, aby mógł tego dokonać powinien być rozszerzeniem class zawartej w pliku model, która zawiera metody bezpośrednio odwołujące się do bazy danych.
Properties & methods
Celem tworzenia Class jest stworzenie obiektu, oraz skategoryzowanie naszego kodu tak by zamknąć wszystkie właściwości i metody tyczące się jednej funkcjonalności w jednym, odosobnionym miejscu.
Constructor & destructor
Constructor to metoda która jest uruchamiana zaraz przed stworzeniem obiektu, natomiast destructor to metoda która jest uruchamiana zaraz po tym jak stworzyliśmy obiekt.
Ich nazwy są z góry określone jako __construct
i __destruct.
W konstruktorze możemy przypisać wartości do właśności naszej Class.
Destruktor pozwala na oczyszczenie naszej Class, np. zamknięcie połączenia z bazą danych.
Static Properties & Methods
Odwołanie się do wartości statycznej stworzonej w Class za pomocą podwójnego znaku dwukropka Person::$maturityAge bez tworzenia obiektu na podstawie tej Class.
Odwołujemy się ze znakiem dolara $ bo to jest zmienna nie własność Class
Do metody static odwołujemy się również poprzez znak podwójnego znaku dwukropka podając jej nazwę Person::setMaturityAge
Statyczne własności i metody to te do których nie potrzebujemy tworzenia Class ale chcemy je dodać by były skategoryzowane dla uporządkowania kodu.
To samo tyczy się const stworzonych wewnątrz class, aby się do nich odwołać nie musimy tworzyć obiektu na podstawie class, ale odwołujemy się poprzez nazwę class znak podwójnego dwukropka i nazwę cosnt, tutaj już bez znaku $ bo konwencja zakłada że ich nazwa składa się z samych dużych liter, czyli:
- tak tworzymy const wewnątrz class MyWebClass:
const WEBCONST = "You can't change this";
- tak odwołujemy się do niej:
$const = MyWebClass::WEBCONST;
Scope Resolution Operators (::)
Const i static nie działają w ten sam sposób jak properties i methods. Kiedy chcemy się do nich odwołać używamy self::
zamiast $this->
Dziedziczenie
Używając zapisu class SecondClass extends FirstClass {} tworzymy nową class która dziedziczy wszystkie properties i methods ze wskazanej class, czyli w SecondClass mamy dostęp do properties i methods z FirstClass.
- Kiedy wewnątrz class odwołujemy się do jej properties czy method używamy Scope Resolution Operators :: i wyrażenia self, czyli
return self::$staticProperty;
- Kiedy wewnątrz class odwołujemy się do jej rodzica properties czy method używamy Scope Resolution Operators :: i wyrażenia parent, czyli
return parent::$staticProperty;
Kiedy przekazujemy obiekt innej class jako parametr funkcji tworzonego obiektu, wtedy mamy w nim dostęp do wszystkich properties i method z tamtej class.
Namespaces
kategoryzowanie Class, w dużych projektach to wręcz wymagane dla utrzymania porządku i przejrzystości kodu.
Tworzymy wtedy foldery z nazwami wskazującymi co dane Classes obsługują.
W pliku class.php dodajemy namespace.
Odwołując się do Class wskazujemy na jej namespace poprzez nazwę namespace i \ czyli: $person_1 = new Person\Person_nws("Bobbie", 28);
Interfaces
To schemat, używany do grupowania określonych klas, aby określić, jak powinny się zachowywać.
Tworzymy je poprzez użycie słowa kluczowego interface i nazwy zaczynającej się z dużej litery. Następnie, w nawiasach klamrowych {}, określamy jakie zasady musi spełniać dana class by móc zaliczać się do stworzonej grupy (interface). Pozwala to na weryfikację czy tworzymy odpowiednio class i zawierają wymagane properties lub methods.
Ewentualne, kolejne interface dodajemy po przecinku: class Paypal implements PaymentInterface, LoginInterface {}
Następnie podczas tworzenia class używamy słowa kluczowego implements i podajemy nazwę interface.
Wtedy w warunku podczas tworzenia obiektu zamiast wymogu konkretnej class dajemy nazwę grupującego je interface.
Abstract Classes
Class przydaje się kiedy potrzebne są pewne zachowania czy wytyczne na podstawie których nie chcesz tworzyć obiektu ale inne class powinny z nich korzystać.
Nie można stworzyć obiektu na podstawie abstract class, można ja tylko użyć jako rozszerzenie innych class.
Abstract class pozwala, podobnie jak interface, zastosować wytyczne które będzie musiała zawierać class o jaka będziemy ją rozszerzać (extends).
abstract class Visa { public function visaPayment() { return "Perform a payment"; } // if any class extends to this abstract class, they have to include a getPayment() method abstract public function getPayment(); }
Anonymous Classes
Stosujemy ją wtedy kiedy potrzebujemy stworzyć prostą class, która będzie użyta raz, w jednym miejscu naszego projektu, dzięki czemu nie jest ona przetrzymywana w pamięci strony, tylko od razu wykonana.
// Anonymous class $newObject = new class() { public function helloWord() { echo 'hello there!'; } }; $newObject->helloWord();
Hope this helps and happy coding :)
Zobacz jeszcze
JavaScript - różne
zamieszczenie atrybutu defer w znaczniku html script pozwala na pobranie zamieszczonego w parametrze src skryptu równolegle z ładowaniem strony ale wykonanie go kiedy strona zostanie już...