Programowanie obiektowe 1/3: klasa, obiekt, właściwości
Dzisiaj zaczynacie nowy temat:
Programowanie obiektowe (ang. Object-Oriented Programming, w skrócie OOP) - nowy sposób organizowania kodu
Dwa nowe pojęcia: klasa (szablon) i obiekt (egzemplarz zrobiony według szablonu)
Nowe słowo kluczowe new i zmienna $this
Ćwiczenie: class-product.php z klasą Product i dwoma obiektami
Rozgrzewka · 3 minuty
Rozgrzewka: funkcje wbudowane
Ile wynosi round(4.5), a ile round(4.49)?
Co pokazuje var_dump(), czego nie pokazuje zwykłe echo?
Jak zapisać dzisiejszą datę w formacie dzień.miesiąc.rok za pomocą date()?
Część 1 · Klasa i obiekt
Klasa i obiekt: szablon i egzemplarz
Klasa to szablon: opisuje, jakie właściwości (dane) i metody (czynności) będzie mieć obiekt. Obiekt to konkretny egzemplarz zrobiony według tego szablonu. To jak przepis kulinarny (klasa) i ciasto upieczone z tego przepisu (obiekt): przepis jest jeden, ciast może być wiele, każde z innym smakiem.
PHP Manual: „Basic class definitions begin with the keyword class, followed by a class name, followed by a pair of curly braces which enclose the definitions of the properties and methods belonging to the class” · php.net/manual/en/language.oop5.basic.php
Nazwa klasy zaczyna się wielką literą (Product, nie product) - to konwencja PHP, nie wymóg języka, ale trzymają się jej wszystkie duże projekty.
Ciekawostka z PHP Manual: pierwsze wsparcie dla klas i obiektów PHP dostało już w wersji 3.0 z 1998 roku. Model, którego uczycie się dzisiaj, pochodzi dopiero z PHP 5 z lipca 2004 roku - to wtedy język dostał nowy silnik (Zend Engine 2.0) z dużo pełniejszym programowaniem obiektowym.
PHP Manual: „To create an instance of a class, the new keyword must be used” · php.net/manual/en/language.oop5.basic.php · ciekawostka: PHP Manual, History of PHP · php.net/manual/en/history.php.php
PHP Manual: „The pseudo-variable $this is available when a method is called from within an object context. $this is the value of the calling object” · php.net/manual/en/language.oop5.basic.php
Część 4 · Niezależne obiekty
Dwa obiekty, dwie niezależne wartości
Zmiana $student1->name nie zmienia $student2->name - każdy obiekt trzyma własną kopię właściwości.
PHP Manual: właściwości obiektu, language.oop5.basic.php · php.net/manual/en/language.oop5.basic.php
Egzamin INF.03
Tak pytają na egzaminie
1. Instrukcja języka PHP tworząca obiekt point dla zdefiniowanej w ramce klasy Point ma postać
classPoint { public$x;
public$y; }
point Point;
point = new Point( );
point Point( );
Point( ) point;
2. Które stwierdzenie najlepiej opisuje klasę Fruit zdefiniowaną w języku PHP i przedstawioną na listingu?
Ma jedno pole i dwie metody, z czego jedna metoda ma zakres prywatny.
Ma dwa pola i jedną metodę, pole color ma zakres widzialności ograniczony tylko do metod klasy.
Ma dwa pola i jedną metodę, pole name ma zakres widzialności ograniczony tylko do metod klasy.
Ma dwa pola i jeden konstruktor, oba pola mają zakres widzialności ograniczony tylko do metod klasy.
CKE, E.14, wrzesień 2014, zadanie 27 · CKE, EE.09, czerwiec 2021, zadanie 5 (bank pytań, przedmiot strony, temat php)
Ćwiczenie przy komputerze · 20 minut
Ćwiczenie: class-product.php
W folderze swojego serwera (np. htdocs) utwórz plik class-product.php.
Zdefiniuj class Product z dwiema właściwościami: public $name; i public $price;.
Utwórz dwa obiekty przez new Product() i ustaw dla każdego inne wartości $name i $price.
Wypisz echo nazwę i cenę obu obiektów, każdy w osobnej linii.
Sprawdź w przeglądarce pod localhost/class-product.php - mają się pojawić dwie linie.
Ma się pojawić: dwie linie z nazwą i ceną, po jednej na obiekt, np. Keyboard - 120 i Mouse - 45 - Twoje wartości mogą być inne.
Zasady pracowni
Na koniec
Sprawdź się
Czym różni się klasa od obiektu?
Do czego służy słowo kluczowe new?
Co oznacza $this wewnątrz metody klasy?
To była pierwsza lekcja tematu programowania obiektowego - na następnej: konstruktor i destruktor.
Poza szkołą
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
Klasa nazwana Product - wielka litera na początku każdego słowa
Standard PSR-1 (zalecenie, jak pisać kod PHP, żeby wyglądał podobnie w każdym projekcie): „Class names MUST be declared in StudlyCaps” - tej konwencji trzymają się Laravel, Symfony i większość frameworków PHP.
nadal w użyciu
Właściwości public, dostępne wprost z zewnątrz
W większych projektach właściwości częściej są private/protected, z dostępem przez metody - to temat kolejnej lekcji tej serii.
nadal w użyciu (obie metody, zależnie od potrzeby)
Obiekty tworzone ręcznie przez new w kodzie
W dużych aplikacjach obiekty często tworzy kontener wstrzykiwania zależności (framework sam wywołuje new w odpowiednim miejscu), zamiast ręcznego new wszędzie.
nadal w użyciu (obie metody, zależnie od skali)
PHP-FIG: „Class names MUST be declared in StudlyCaps” · php-fig.org/psr/psr-1/