Kurucu metotlar sınıfa ait her bir nesne üretildiği zaman otomatik olarak çalışan özel metotlardandır. Kurucu metotlar genellikle sınıftan nesne üretimi esnasında, sınıfa ait özelliklerin ilk değerlerini yüklemek için ve gerekli görülmesi durumunda diğer başka metotların tetiklenerek çalıştırılması amacıyla kullanılırlar. Ayrıca bu metod public olarak tanımlanmak zorundadır. Aksi halde kurucu metoda erişilemeyeceğinden dolayı sistem ölümcül bir hata verecektir. Yıkıcı metotlar ise tam tersi mantıkla; sınıf ile olan bağlantı sonlandığında çalışırlar. Sınıf kullanımı sona erdiğinde özelliklerin silinmesi ve gerekli metotların çalıştırılması amacıyla kullanılabilirler.
Kurucu ve yıkıcı metotların tanımlanması
- Kurucu metotlar iki şekilde tanımlanabilir:
__construct
anahtar kelimesi ile,- Sınıf içinde adı sınıf adıyla aynı olan bir fonksiyon tanımlarsak bu fonksiyon bizim kurucu metodumuz olacaktır.
- Yıkıcı metotlar ise __destruct
anahtar kelimesi ile tanımlanırlar.
<?php
class Araba {
public $marka;
public $model;
public function __construct()
{
echo 'kurucu metod çalıştı! <br>';
}
public function __destruct()
{
echo 'yıkıcı metod çalıştı! <br>';
}
}
$araba1 = new Araba;
// ÇIKTI
/*
kurucu metod çalıştı!
yıkıcı metod çalıştı!
*/
?>
Yukarıda bir Araba
sınıfı tanmladık ve içerisinde __construct
ve __destruct
metodlarını yazdık. Sonrasında dikkat ederseniz sadece $araba1
nesnesini oluşturduk. Nesne oluşturulunca ilk olarak kurucu metod otomatik olarak çalışacak ve ekrana "kurucu metod çalıştı!" çıktısını basacaktır. Daha sonra başka bir işlem yapılmadığı için yıkıcı metod devreye girer ve ekrana "yıkıcı metod çalıştı!" çıktısını basar.
Kurucu metodumuzu __construct
anahtar kelimesi haricinde, adı sınıf adıyla aynı olan public bir metod tanımlayarak da oluşturabiliriz. Aşağıdaki örneği inceleyiniz.
<?php
class Kitap
{
public $ad;
public $yazar;
// kurucu metod (adı sınıf adıyla aynı)
public function kitap()
{
echo 'kurucu metod çalıştı <br>';
}
}
$kitap1 = new Kitap();
$kitap2 = new Kitap();
// ÇIKTI
/*
kurucu metod çalıştı
kurucu metod çalıştı
*/
?>
Örnekte Kitap
ismiyle bir sınıf tanımlaması yaptık. Sınıf içerisinde ise sınıf ismiyle aynı isimde (kitap)public bir metod tanımladık. İşte bu bizim sınıfımızın kurucu metodu oldu. Sınıf dışında $kitap1
ve $kitap2
şeklinde iki tane nesne ürettik. Kitap
sınıfı her nesne üretiminde çağrılacağı için ekrana iki kere "kurucu metod çalıştı" yazısı yazılıyor.
Parametre alan kurucu metotlar
Sınıflardan nesne üretirken sınıf özelliklerine ilk değer ataması yapabiliriz. Bunu kurucu metodumuza parametre göndererek sağlayabiliriz. Kurucu metodun parametrelerinin alacağı değerleri, sınıftan nesne ürettiğimiz esnada göndeririz.
<?php
class Site
{
private $ad;
private $url;
// Parametre alan kurucu metod
public function __construct($ad, $url)
{
$this->ad = $ad;
$this->url = $url;
}
public function ekranaYaz()
{
echo "$this->ad : $this->url <br>";
}
}
$site1 = new Site('Google', 'google.com');
$site2 = new Site('Facebook', 'facebook.com');
$site1->ekranaYaz();
$site2->ekranaYaz();
// ÇIKTI
/*
Google : google.com
Facebook : facebook.com
*/
?>
Örnekte Site
adında bir sınıf oluşturduk.
public function __construct($ad, $url)
{
$this->ad = $ad;
$this->url = $url;
}
Daha sonra kurucu metodu oluşturuken iki adet parametre alacağını belirttik. Parametrelerden gelen değerleri sınıf özellikleri olan ad ve url değişkenlerine atadık.
ad
yerine isim
, url
yerine adres
gibi farklı isimler de yazabiliriz. Fakat $this->ad
ve $this->url
kısmı sabittir. Çünkü burada yazdığımız isimler, sınıfın özelliğinde kullandığımız isimlerdir.
public function __construct($isim, $adres)
{
$this->ad = $isim;
$this->url = $adres;
}
Site
sınıfından $site1
ve $site2
adında iki adet nesne ürettik ve bu nesneler için kurucu metoda aşağıdaki şekilde ad ve url değerlerini gönderdik. Artık gönderdiğimi bu değerler tanımlandığı nesneler için kullanılabilecekler.
$site1 = new Site('Google', 'google.com');
$site2 = new Site('Facebook', 'facebook.com');
Daha sonra ekranaYaz()
metodu her nesne için ayrı ayrı çağrılıyor ve daha önce yüklediğimiz değerleri bu metod içinde aşağıdaki şekilde ekrana yazdırabiliyoruz.
public function ekranaYaz()
{
echo "$this->ad : $this->url <br>";
}