Uvod u PHP OOP (Objektno Orijentirano Programiranje)
PHP podržava objektno orijentirano programiranje (OOP) od verzije 5.0, omogućujući programerima da koriste klase i objekte za strukturiranje svog koda na modularan i ponovljiv način. U ovom tutorialu proći ćemo kroz osnove rada s klasama, namespace-ovima i use
ključnom riječi u PHP-u.
Klase i objekti
Klase su nacrti za stvaranje objekata. Definiraju svojstva (varijable) i metode (funkcije) koje objekti te klase mogu imati.
Osnovna klasa
<?php class Car { // Svojstva public $brand; public $model; public $year; // Konstruktor public function __construct($brand, $model, $year) { $this->brand = $brand; $this->model = $model; $this->year = $year; } // Metoda za prikaz informacija o autu public function displayInfo() { return "This car is a $this->year $this->brand $this->model."; } } // Stvaranje objekta $car = new Car("Toyota", "Corolla", 2020); echo $car->displayInfo(); ?>
Nasljeđivanje
Nasljeđivanje omogućuje jednoj klasi (podklasi) da naslijedi svojstva i metode druge klase (nadklase).
<?php class ElectricCar extends Car { public $batteryCapacity; public function __construct($brand, $model, $year, $batteryCapacity) { parent::__construct($brand, $model, $year); $this->batteryCapacity = $batteryCapacity; } public function displayInfo() { return parent::displayInfo() . " It has a battery capacity of $this->batteryCapacity kWh."; } } $electricCar = new ElectricCar("Tesla", "Model 3", 2021, 75); echo $electricCar->displayInfo(); ?>
Namespace-ovi
Namespace-ovi omogućuju grupiranje povezanih klasa, funkcija i konstanti kako bi se izbjegli sukobi imena.
Definiranje namespace-a
<?php namespace Vehicles; class Car { public $brand; public $model; public function __construct($brand, $model) { $this->brand = $brand; $this->model = $model; } public function displayInfo() { return "This car is a $this->brand $this->model."; } } ?>
Korištenje namespace-a
<?php require 'Car.php'; use Vehicles\Car; $car = new Car("Honda", "Civic"); echo $car->displayInfo(); ?>
Autoloading
Autoloading omogućuje automatsko uključivanje PHP datoteka koje sadrže potrebne klase. To se često radi putem composer
alata, ali može se postići i ručno.
Primjer autoloadera
<?php spl_autoload_register(function ($class_name) { include $class_name . '.php'; }); use Vehicles\Car; $car = new Car("Ford", "Mustang"); echo $car->displayInfo(); ?>
Interface-i
Interface-i definiraju skup metoda koje klasa mora implementirati, ali ne sadrže stvarnu implementaciju tih metoda.
Definiranje i korištenje interface-a
<?php interface Vehicle { public function start(); public function stop(); } class Car implements Vehicle { public function start() { echo "Car started\n"; } public function stop() { echo "Car stopped\n"; } } $car = new Car(); $car->start(); $car->stop(); ?>
Apstraktne klase
Apstraktne klase ne mogu se instancirati i mogu sadržavati apstraktne metode koje podklase moraju implementirati.
Definiranje i korištenje apstraktne klase
<?php abstract class Shape { abstract protected function calculateArea(); public function displayArea() { echo "The area is: " . $this->calculateArea() . "\n"; } } class Circle extends Shape { private $radius; public function __construct($radius) { $this->radius = $radius; } protected function calculateArea() { return pi() * pow($this->radius, 2); } } $circle = new Circle(5); $circle->displayArea(); ?>
Zaključak
Korištenje OOP-a u PHP-u može značajno poboljšati organizaciju i ponovljivost vašeg koda. Ovaj tutorial pokrio je osnovne koncepte rada s klasama, nasljeđivanjem, namespace-ovima, interface-ima i apstraktnim klasama. OOP vam omogućuje da pišete čistiji, modularniji i održiviji kod.