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.

 

Kontaktirajte nas

Ispunite obrazac ispod i mi ćemo Vas kontaktirati. Na sve upite stojimo odgovoriti u roku od 24 sata radnim danima.