Načrtovanje in razvoj spletnih aplikacij

Objekti v PHP

Objektno programiranje omogoča, da podatke in funkcionalnost povežemo v smiselne celote. V PHP objekt nastane iz razreda, razred pa je predloga, v kateri določimo lastnosti in metode.

Pomni: Razred je predloga, objekt pa je konkreten primerek tega razreda.

Kaj sta razred in objekt

Razred vsebuje lastnosti in metode. Lastnosti so podatki objekta, metode pa funkcije, ki jih objekt izvaja. Iz enega razreda lahko ustvarimo več različnih objektov.

Na primer: razred Avtomobil lahko vsebuje lastnost barva. Vsak objekt tega razreda ima to lastnost, vendar ima lahko drugačno vrednost, na primer modra, zelena ali rdeča.

Pomni: V sodobnem PHP lastnosti praviloma zapisujemo z modifikatorji dostopa, na primer public, in ne več s starejšim zapisom var.

Ustvarjanje razreda

Razred definiramo s ključno besedo class in z zavitimi oklepaji, v katere zapišemo lastnosti in metode.

<?php
class PrviRazred
{
    public $ime = "Simon";
}
?>

Pozor: Starejši zapis var je danes manj primeren za uporabo. V sodobni kodi raje uporabljamo public, protected ali private.

Ustvarjanje objektov

Ko imamo razred, iz njega ustvarimo objekt z ukazom new.

<?php
class PrviRazred
{
    public $ime = "Simon";
}

$obj1 = new PrviRazred();
$obj2 = new PrviRazred();
?>

S tem ustvarimo dva različna objekta istega razreda.

Pomni: Iz istega razreda lahko ustvarimo več objektov. Vsak objekt ima svoje stanje in svoje vrednosti lastnosti.

Dostop do lastnosti objekta

Do lastnosti objekta dostopamo z operatorjem ->.

<?php
class PrviRazred
{
    public $ime = "Simon";
}
            
$obj1 = new PrviRazred();
$obj2 = new PrviRazred();
            
$obj1->ime = "Janez";
echo $obj1->ime . "<br>";
echo $obj2->ime . "<br>";
?>
Janez
Simon

Prvi objekt izpiše Janez, drugi pa še vedno Simon, ker ima vsak objekt svojo vrednost lastnosti.

Metode in $this

V razred lahko poleg lastnosti dodamo tudi metode. Znotraj metode do lastnosti istega objekta dostopamo z uporabo $this.

<?php
class Oseba
{
    public $ime = "Ana";

    public function izpisiIme()
    {
        echo $this->ime;
    }
}

$oseba = new Oseba();
$oseba->izpisiIme();
?>

Pomni: $this pomeni trenutni objekt, znotraj katerega se metoda izvaja.

Konstruktor

Če želimo, da objekt ob nastanku prejme začetne podatke, uporabimo konstruktor __construct().

<?php
class Oseba
{
    public $ime;

    public function __construct($ime)
    {
        $this->ime = $ime;
    }
}

$oseba = new Oseba("Maja");
echo $oseba->ime;
?>

Pozor: Nestatičnih metod v sodobnem PHP ne kličemo statično. Tak klic v PHP 8.x povzroči napako.

Pogoste napake

  • uporaba zastarelega zapisa var namesto public,
  • izpuščanje zapisa new pri ustvarjanju objekta,
  • dostopanje do lastnosti z napačnim operatorjem,
  • izpuščanje uporabe $this-> znotraj metode,
  • napačno prepričanje, da sprememba ene lastnosti v enem objektu spremeni vse objekte istega razreda.