Konstruktor je posebna metoda razreda, ki se samodejno izvede ob ustvarjanju novega objekta. V sodobnem PHP konstruktor vedno zapišemo kot __construct().
Pomni: Konstruktor v novi PHP kodi ni metoda z istim imenom kot razred, ampak posebna metoda __construct().
Zakaj uporabljamo konstruktor
Konstruktor uporabimo takrat, ko želimo objektu ob nastanku določiti začetne vrednosti ali izvesti pripravo podatkov. Tako lahko že ob izdelavi objekta poskrbimo, da ima ta smiselno začetno stanje.
Preprost primer konstruktorja
<?php
class Avto
{
private $model;
public function __construct()
{
$this->model = "Nedefinirano";
}
public function getModel()
{
return $this->model;
}
}
$avto = new Avto();
echo $avto->getModel();
?>
Pomni: Konstruktor se izvede samodejno, zato ga po ustvarjanju objekta ni treba posebej klicati.
Konstruktor s parametri
Konstruktor lahko prejme tudi argumente. Tako lahko že ob ustvarjanju objekta določimo njegove začetne vrednosti.
<?php
class Avto
{
private $model;
public function __construct($model)
{
$this->model = $model;
}
public function getModel()
{
return $this->model;
}
}
$a4quattro = new Avto("A4 Quattro");
$golf = new Avto("Golf");
echo $a4quattro->getModel() . "<br>";
echo $golf->getModel();
?>
Pozor: Do lastnosti z vidnostjo private ne moremo dostopati neposredno zunaj razreda. Za branje ali spreminjanje praviloma uporabimo javne metode.
Kaj pomeni $this
$this pomeni trenutni objekt. Z zapisom $this->model znotraj konstruktorja ali druge metode dostopamo do lastnosti tega objekta.
Pomni: Znotraj konstruktorja pogosto uporabimo $this->, ker z njim začetne vrednosti shranimo v lastnosti objekta.
Destruktor
Razred ima lahko tudi destruktor __destruct(). Ta se izvede, ko na objekt ni več referenc ali med zaključevanjem izvajanja skripte. Uporaben je predvsem pri čiščenju virov ali zaključnih opravilih.
<?php
class Avto
{
public function __construct()
{
echo "Kličemo konstruktor!<br>";
}
public function __destruct()
{
echo "Kličemo destruktor!<br>";
}
}
$model = new Avto();
$model = null;
?>
Pozor: Starševski konstruktor in destruktor se ne pokličeta samodejno, če ju otrok prepiše. Če ju želimo izvesti, moramo v ustrezni metodi poklicati parent::__construct() ali parent::__destruct().
Modifikatorji dostopa
public– dostop dovoljen od vsepovsod,private– dostop dovoljen samo iz istega razreda,protected– dostop dovoljen iz istega in izpeljanih razredov.
Pogoste napake
- napačno razumevanje konstruktorja kot metode z enakim imenom kot razred,
- spregled, da se
__construct()izvede samodejno, - neposreden dostop do
privatelastnosti zunaj razreda, - izpuščanje uporabe
$this->znotraj konstruktorja, - nerazlikovanje med konstruktorjem in destruktorjem.