Klasy i obiekty w PHP

Klasy i obiekty w PHP

Klasa to definicja obiketu. Gdy mówimy o obiektach, każdy z nich jest instancją danej klasy. Bazując na tym, co opowiadałem we wprowadzeniu do programowania obiektowego, klasa opisuje zestawy właściwości i metod, których później używa stworzony obiekt.

Przykładową KLASĄ z życia wziętą może być Samochód. Sam z siebie nie jest konkretnym przedmiotem, a jedynie abstrakcją, za którą musi się kryć konkretny obiekt.

Każdy z nas wie, że każdy samochód ma koła, silnik, zderzaki, karoserię, szyby i drzwi. Do tego cechuje go marka, model, wersja wyposażenia, kolor itp. Każdy samochód może jechać, zahamować, skręcać kołami, zaświecić światła.

Klasa jest właśnie takim opisem cech i możliwości samochodu.

Natomiast OBIEKTEM jest już konkretny samochód, np. Opel Insignia, którym obecnie mam przyjemność jeździć.

Tworząc konkretny obiekt wypełniasz pola konkretnymi danymi. Ten samochód już ma konkretny kolor, wersję, silnik i tak dalej.

Definicja klasy w PHP

Stworzymy sobie teraz przykładową, bardzo prostą klasę samochodu w PHP:

<?php

class Samochod {
  public $marka;
  public $model;
  public $rokProdukcji;
}

?>

Mając tak przygotowaną definicję definicję możesz utworzyć nowy, konkretny samochód:

<?php

$samochod = new Samochod();

$samochod->marka = 'Opel';
$samochod->model = 'Insignia';
$samochod->rokProdukcji = 2015;

echo $samochod->marka . ' ' . $samochod->model . ' ' . $samochod->rokProdukcji;

// wyświetli Opel Insignia 2015

?>

Zauważ, w jaki sposób tworzymy nową klasę.

Kluczowym elementem jest tutaj słówko new, po którym musimy podać nazwę klasy oraz nawiasy ze średnikiem.

Gdyby nie słowo new, tworzenie klasy wyglądałoby identycznie jak wywołanie funkcji.

Nawiasy służą do przekazywania parametrów dla konstruktora. Do tego jednak przejdziemy nieco później. Póki co nawiasy pozostaną puste.

Klasa vs. tablica asocjacyjna

W obecnej formie klasa przypomina trochę bardziej rozbudowaną tablicę asocjacyjną. Taki sam efekt moglibyśmy uzyskać z użyciem tablic:

<?php

$samochod = new array();

$samochod['marka'] = 'Opel';
$samochod['model'] = 'Insignia';
$samochod['rokProdukcji'] = 2015;

echo $samochod['marka'] . ' ' . $samochod['model'] . ' ' . $samochod['rokProdukcji'];

// wyświetli Opel Insignia 2015

?>

Powyższy kod nie różni się bardzo od poprzedniego, jeśli chodzi o czytelność i przejrzystość. Na tym etapie faktycznie tak jest. Tablice asocjacyjne są często używane zamiennie z prostymi obiektami. Np. przy zwracaniu danych z bazy MySQL mamy dwie bardzo podobne metody, które zwracają te same dane w dwóch różnych typach:

mysqli_fetch_assoc – zwraca wiersz z tabeli bazy danych w postaci tablicy asocjacyjnej

mysqli_fetch_object – zwraca wiersz z tabeli w postaci obiektu

Jedyną różnicą między dwoma rezultatami powyższych funkcji jest składnia kodu. Przy tablicach posługujemy się nawiasami kwadratowymi podczas gdy korzystając z obiektów, użyjemy znaku minusa i mniejszości -> (tak zwanej „dzidy”).

Musisz jednak wiedzieć, że obiekty to nie tylko zbiór pól, do których możesz przypisać wartość i ją później odczytać. To tylko niewielki wycinek ich możliwości.

Korzystanie z obiektów daje Ci ogromne możliwości, które poznasz z każdą kolejną lekcją.

Jest jeszcze jedna ciekawa funkcjonalność, która wiąże się z polami.

Nadawanie polu domyślnej wartości

W pierwszym przykładzie wartość każdego pola była pusta w definicji klasy. Dopiero gdy stworzyliśmy konkretny obiekt, dopisywaliśmy wartości do pól.

Jednak klasy dają Ci możliwość przypisania polom wartości z automatu, już w momencie tworzenia obiektu.

Zobacz poniższy przykład:

<?php

class SamochodOpel {
  public $marka = 'Opel';
  public $model;
  public $rokProdukcji = 2017;
}

$samochod = new SamochodOpel();
$samochod->model = 'Insignia'; 

echo $samochod->marka . ' ' . $samochod->model . ' ' . $samochod->rokProdukcji;
// wyświetli Opel Insignia 2017
?>

Jak widzisz, przypisaliśmy wartość jedynie dla pola model, podczas gdy reszta była utworzona domyślnie w definicji klasy.

Do tej pory potrafisz:

  • stworzyć definicję obiektu w postaci klasy
  • dodać publiczne pola do klasy
  • przypisywać im wartości
  • odczytywać ich wartość
  • korzystać z „dzidy”, by dostać się do pola klasy
  • nadawać polom wartości domyślne

Teraz czas na poznanie metod, które klasa może definiować. Zapraszam!

Spis lekcji w programowaniu obiektowym

Poprzednia lekcja: Programowanie obiektowe w PHP – wprowadzenie Następna lekcja: Metody klasy