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.
