Pomembni deli razredov so tudi konstruktorji. Konstruktor je funkcija, ki nosi isto ime kot razred, v katerem je definirana. Konstruktorji so avtomatsko klicani, ko ustvarimo nov predmet razreda new
.
Da si bomo lažje predstavljali delo z objekti, si poglejmo primer, pri katerem imamo razred Avto
. Za vsak avto v aplikaciji lahko sedaj tvorimo svoj objekt, v katerem se nahajajo informacije o posameznem avtomobilu, v tem primeru bo to zgolj spremenljivka $model
, ki je označena kot private
.
Vzemimo primer, da imamo v naši aplikaciji A4 Quattro
in Golf
. Zanju ustvarimo dve ločeni instanci razreda Avto
, vrednosti tem instancam pa nastavimo preko metode setModel()
, neposreden dostop zunaj razreda do imena je namreč zaradi privatnosti lastnosti $model
nedovoljen!
Če želimo nastavljeno lastnost prebrati, pa moramo uporabiti metodo getModel()
.
Metodi na ta način postaneta ključni za komunikacijo izven objekta.
Primer razreda:
class Avto {
private $model = ''; // privzeta vrednost
function setModel($model) {
$this->model = $model;
}
function getModel() {
return $this->model;
}
}
Primer konstruktorjev:
<?php
//primer, kjer je razred definiran v drugi datoteki
require_once('avto.php');
$a4quattro = new Avto(); //izdelamo objekt
$a4quattro->setModel('A4 Quattro');
$golf = new Avto(); //izdelamo objekt
$golf->setModel('Golf');
echo $a4quattro->getModel() . "<br />{$golf->getModel()}";
echo $golf->model . '<br />' . $a4quattro->model; //napaka, ni dovoljeno
?>
$this
je kazalec na trenutno instanco razreda. Objekte kreiramo z operatorjem new
, ki vrne referenco (kazalec) na ustvarjen objekt. Razred ima lahko še konstruktor in destruktor, konstruktor je metoda __construct()
, ki se izvede samodejno ob izdelavi instance in je namenjena inicializaciji spremenljivk objekta, destructor je metoda __destruct()
, ki se izvede samodejno, ko ni več referenc na objekt ali je objekt eksplicitno uničen. Imamo še modifikatorje dostopa:
public
– dostop dovoljen od povsod,private
– dostop dovoljen samo iz lastnega razreda,protected
– dostop dovoljen iz lastnega in iz izpeljanih razredov.
<?php
class Avto {
private $model;
function __construct() {
echo "Kličemo konstruktor!<br />";
$this->model = "Nedefinirano<br />";
}
function __destruct() {
echo "Kličemo destruktor!<br />";
}
function setModel($model) { $this->model = $model; }
function getModel() { return $this->model; }
};
$model = new Avto();
echo $model->getModel();
$model = NULL; // kliče destruktor, isto se zgodi pri unset()
?>
Nedefinirano
Kličemo destruktor!