PHP OOP Sihirli Metotlar
Çeşitli işlemler için PHP tarafından oluşturulmuş sihirli metotlar ile ilgili bilgiler yer almaktadır.
PHP OOP Sihirli Metotlar
PHP çift alt çizgi (__) ile tanımlanmış metotlar sihirli / özel metot olarak adlandırılır.
Bu metotları diğer metotlardan ayıran en büyük fark sihirli metotların kendiliğinden çağrılmasıdır.
__construct ve __destruct
Nesne belleğe yüklenirken ve silinirken çalışan metotlardır.
<?php
class ornekNesne {
public function __construct() { // Nesne oluşturulduğunda otomatik çalışacak metot
echo "Nesne belleğe yüklendi. <br />";
}
public function __destruct() { // Nesne silindiğinde otomatik çalışacak metot
echo "Nesne bellekten silindi.";
}
}
$nesne = new ornekNesne();
?>
Detaylı bilgi için tıklayın.
__call
Nesne içinde olmayan bir metot çağrıldığında çalışır.
<?php
class OrnekNesne {
public function __call($metodAdi, $metodParametreleri) {
echo $metodAdi . " metodu bulunamadı.";
print_r($metodParametreleri);
}
}
$nesne = new OrnekNesne();
$nesne->AdiSoyadi("Yusuf", "SEZER"); // tanımlanmamış bir metot.
?>
__callStatic
Nesne içinde olmayan bir static metoda çağrıldığında çalışır.
<?php
class OrnekNesne {
public static function __callStatic($metodAdi, $metodParametreleri) {
echo $metodAdi . " metodu bulunamadı.";
print_r($metodParametreleri);
}
}
OrnekNesne::Listele("hepsi"); // tanımlanmamış static metot.
?>
Metodun static olduğuna dikkat edin.
__get
Nesne içinde olmayan veya erişim izni olmayan bir özelliğe erişilmeye çalışıldığında çalışır.
<?php
class OrnekNesne {
private $adi;
public function __get($ozellikAdi) {
echo $ozellikAdi . " özelliği bulunmuyor veya erişilemiyor.";
}
}
$nesne = new OrnekNesne();
echo $nesne->adi; // private olan bir özelliğe erişim
echo $nesne->soyadi;
?>
__set
Nesne içinde olmayan veya erişim izni olmayan bir özelliğe değer atanmaya çalışıldığında çalışır.
<?php
class OrnekNesne {
private $adi;
public function __set($ozellikAdi, $ozellikDegeri) {
echo $ozellikAdi . " özelliği bulunmuyor veya erişilemiyor. <br />";
echo $ozellikDegeri . " değeri atanmaya çalışıldı. <br />";
}
}
$nesne = new OrnekNesne();
$nesne->adi = "Yusuf"; // private bir özelliğe değer atanmak istendi.
$nesne->soyadi = "SEZER"; // olmayan bir özelliğe değer atanmak istendi.
?>
__isset
Nesne içinde olmayan veya erişim izni olmayan bir özellik isset veya empty fonksiyonu ile sınandığında çalışır.
<?php
class OrnekNesne {
private $adi;
public function __isset($ozellikAdi) {
echo $ozellikAdi . " özelliği bulunmuyor veya erişilemiyor. <br />";
}
}
$nesne = new OrnekNesne();
isset($nesne->adi);
empty($nesne->adi);
isset($nesne->soyadi);
empty($nesne->soyadi);
?>
__unset
Nesne içinde olmayan veya erişim izni olmayan bir özellik unset fonksiyonu ile yok edilmeye çalışıldığında çalışır.
<?php
class OrnekNesne {
private $adi;
public function __unset($ozellikAdi) {
echo $ozellikAdi. " özelliği bulunmuyor veya erişilemiyor. <br />";
}
}
$nesne = new OrnekNesne();
unset($nesne->adi);
unset($nesne->soyadi);
?>
__sleep
Nesneye serialize fonksiyonu uygulandığında çalışır.
<?php
class OrnekNesne {
public function __sleep() {
echo "Nesne dizi haline getiriliyor.";
}
}
$nesne = new OrnekNesne();
serialize($nesne);
?>
__wakeup
Nesneye unserialize fonksiyonu uygulandığında çalışır.
<?php
class OrnekNesne {
public function __wakeup() {
echo "Dizi nesne haline getiriliyor.";
}
}
$nesne = new OrnekNesne();
$sonuc = serialize($nesne);
unserialize($sonuc);
?>
__toString
Nesne yazdırıldığında çalışır.
<?php
class OrnekNesne {
public function __toString() {
return "Nesne yazdırılmaya çalışıldı.";
}
}
$nesne = new OrnekNesne();
echo $nesne;
?>
__invoke
Nesne fonksiyon gibi çalıştırıldığında çalışır.
<?php
class OrnekNesne {
public function __invoke($gonderilenParametre) {
echo "Nesne " . $gonderilenParametre . " parametresi ile fonksiyon olarak çalıştırıldı.";
}
}
$nesne = new OrnekNesne();
$nesne(5); // nesne fonksiyon gibi çalıştırıldı.
?>
__set_state
Nesneye var_export fonksiyonu uygulandığında çalışır.
<?php
class OrnekNesne {
public $ozellik_1 = "Özellik 1";
protected $ozellik_2 = "Özellik 2";
private $ozellik_3 = "Özellik 3";
public static function __set_state($degiskenler) {
echo "Nesne özellikleri <ol>";
foreach ($degiskenler as $degisken) {
echo "<li>" . $degisken . "</li>";
}
echo "</ol>";
}
}
$nesne = new OrnekNesne();
var_export($nesne);
echo "<br /> <br />";
eval(var_export($nesne, true) . ';');
?>
__clone
Nesne clone anahtar kelimesiyle kopyalandığında çalışır.
<?php
class OrnekNesne {
private static $kopyaSayisi = 0;
public function __clone() {
self::$kopyaSayisi++;
}
public static function kopyaSayisi() {
return "Toplam kopya sayısı : " . self::$kopyaSayisi;
}
}
$nesne = new OrnekNesne();
$nesne1 = clone $nesne;
$nesne2 = clone $nesne;
$nesne3 = clone $nesne;
echo OrnekNesne::kopyaSayisi();
?>
__debugInfo
Nesneye var_dump fonksiyonu uygulandığında çalışır.
<?php
class OrnekNesne {
public $adi = "yuSuf";
public $soyadi = "seZeR";
public function __debugInfo() {
$dizi = array();
$dizi[] = ucwords(strtolower($this->adi));
$dizi[] = strtoupper($this->soyadi);
return $dizi;
}
}
$nesne = new OrnekNesne();
var_dump($nesne);
?>
PHP çift alt çizgi (__) ile başlayan metotları sihirli metot olarak tanımlamıştır. Nesne içinde metotların çift alt çizgi (__) ile başlamaması faydalı olacaktır.
PHP OOP Derslerine buradan ulaşabilirsiniz…
Hayırlı günler dilerim.