Bu yazımızda PHP dilindeki sihirli metotlara değineceğiz. Nesne yönelimli programlamada bazı durumlarda otomatik olarak çalışmasını istediğimiz şeyler olabilir. Bunun için sihirli metotları kullanırız.
Bu metotlar PHP ile ön tanımlı olarak gelirler. Ve başlarında "__" çift alt çizgi bulunur. Bu nedenle kendi tanımladığımız fonksiyonların başına çift alt çizgi koymamamız tavsiye edilir. Şimdi en çok kullanılan sihirli metotlara sırayla değinelim.
Belki de en çok kullanacağınız sihirli metot budur.Constructor kelime anlamı olarak yapıcı anlamına gelmektedir. Bu metoda da yapıcı metot denir. Bir sınıf çağırıldığında ilk çalışan metot budur. Sınıf çağırıldığında ilk olarak yapması gereken şeyleri belirtmek için bu sihirli metotu kullanırız.
<?php
class Insan
{
public $ad;
public $soyad;
public function __construct($ad,$soyad)
{
$this->ad = $ad;
$this->soyad = $soyad;
echo $this->ad." ".$this->soyad;
}
}
$zafer = new Insan("Zafer","Yıldız")
// Çıktı: Zafer Yıldız
?>
Sınıf içerisinde en son çalışan metottur. Destructor kelime anlamı olarak yıkıcı anlamına gelir. Bu metoda da yıkıcı metot denir.
<?php
class Insan
{
public $ad;
public $soyad;
public function __construct($ad,$soyad)
{
$this->ad = $ad;
$this->soyad = $soyad;
echo $this->ad." ".$this->soyad."<br>";
}
public function __destruct(){
echo "Sınıfta çalışan son fonksiyon";
}
}
$zafer = new Insan("Zafer","Yıldız");
/*Çıktı :
Zafer Yıldız
Sınıfta çalışan son fonksiyon
*/
?>
Bu metodu ise sınıf içinde bir metodun olup olmadığını kontrol etmek için kullanabiliriz.
<?php
class Sare {
public function __call($metodAdi, $metodParametreleri) {
echo $metodAdi . " metodu bu sınıfta yok.";
print_r($metodParametreleri);
}
}
$nesne = new Sare();
$nesne->AdiSoyadi("Sarenur", "Ocaktan"); // Sınıfta olamayan bir metot
?>
Nesne içinde erişilemeyen veya olmayan bir özelliğe ulaşmaya çalışırsak bu fonksiyon otomatik olarak çalışır.
<?php
class Insan {
private $kilo;
public function __get($ozellikAdi) {
echo $ozellikAdi . " özelliği bulunmuyor veya erişilemiyor.";
}
}
$insan = new Insan();
echo $insan->kilo; // private olan bir özelliğe erişim olmadığı için get sihirli metodu çalışır.
?>
Tanımlanan sınıfta olmayan bir özelliğe değer verildiğinde devreye giren metoddur.
<?php
class Araba
{
public $marka;
private $model;
public function __set($degisken, $deger)
{
echo "$degisken adında bir özellik yok veya erişim izniniz bulunmamaktadır.";
}
}
$araba = new Araba();
$araba->marka = "Opel";
$araba->model = "Şahin"; //private olduğu için hata verecektir.
?>
Nesne yazdırılmaya çalışıldığında çalışır.
<?php
class Demlik
{
public $boyut;
public function __toString()
{
return "Echo yazınca ben çalışıyorum";
}
}
$demlik = new Demlik();
echo $demlik;
?>
Nesne eğer fonksiyon gibi çağırılırsa bu metot çalışır.
<?php
class Bardak {
public function __invoke($param) {
echo $param;
}
}
$bardak = new bardak();
$bardak("Zafer");