Php OOP (Nesne Tabanlı Programlama) de kullanılan sihirli metodlar bulunmaktadır. Bu metodlar php tarafından tanımlanmış, iş ve işlemleri yapmak için varsayılan olarak programlanmıştır. Kendi oluşturduğumuz metodlardan iki alt çizgi __metotAdi ile ayrılmaktadır. Bu nedenle oluşturacağınız metotların __ iki alt çizgi ile başlamamasına özen gösterin. Php sihirli metodlar her sınıf içerisinde gerekli olan işlemler için oluşturulmuştur. Gereksiz metot yok diyebiliriz. Şimdi aşağıdaki tablodu php sihirli metotları listeledik. Yine php sihirli metotların kullanımıyla ilgili örenker oluşturduk. Faydalı olması dileğiyle… Başarılar. kullanımı ile
__construct() | Bir sınıfı çağırdığımız kendiliğinden çalışan kurucu bir metotdur. Bu metot ön yükleyicide diyebiliriz. |
__destruct() | Sınıf çağırıldıktan sonra çalışan yıkıcı metotur. Bu metot sınıfın işi bittikten sonra kendisi devreye girer. |
__call() | Bir sınıfı oluşturduğunuzda ve sınıf içerisinde bulunmayan bir metodu çağırdığınız kendiliğinden devreye giren metotdur. |
__callStatic() | Oluşturulan sinifta tanımlanmayan static metot çağırıldığında çalışcak metotdur. |
_get() | Tanımlanan sınıfta olmayan bir özellik çağırıldığında devreye giren metotdur. |
__set() | Tanımlanan sınıfta olmayan bir özelliğe değer verildiğinde devreye giren metotdur. |
__isset() | Tanımlanan sınıfta olmayan bir özelliğe isset() ve empty() fonksiyonlar kullanılma çalışıldığında devreye girer |
__unset() | Sınıfta tanımlanmayan bir özellik unset() fonksiyonu uygulandığında devreye giren metotdur. |
__sleep() | Tanımlanan sınıfa serialize() funksiyonu uygulandığında devreye giren metotdur. |
__wakeup() | Tanımlanan sınıfa unserialize() fonksiyonu uygulandığında devreye giren metotdur. |
__toString() | Tanımlanan sınıf print veya echo ile ekrana basılmaya çalışıldığında devreye giren metotdur. |
__invoke() | Tanımlanan sınıfın nesnesini metot gibi çağırıldığında devreye girer |
__set_state() | Tanımlanan sınıfa var_export() funksiyonu uygulandığında devreye girer. |
__clone() | Tanımlanan sınıf klonlanmaya çalışıldığında devreye giren metotdur. |
__construct ve __destruct Kullanımı (Kurucu ve Yıkıcı Metodlar)
Bir sınıf çağrılacağından çağrılma esansında, sınıf oluşturulurken yapılması gereken işler varsa ve o işler her sınıf çağırıldığında yapılıyorsa bu gibi işlemler __construct kısmıda yazıyoruz. Aynı zamamda sınıf oluşturulurken parametre (veri) göndermemizide sağlıyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class t2_ogrenci{ private $data; private $user; private $pass; function __construct($dbName,$userName,$userPass){ //Sınıf oluşturulurken parametre gönderilmesini istedik $this->data=$dbName; $this->user=$userName; $this->pass=$userPass; //sınıf çağırılırken sınıfı içerisindek değikenlere //göndermiş olduğumuz parametler eklenecek echo "Veri tabanı bilgileri girildi."; } } |
Veri tabanı bilgileri sınıf çağırlırken parametre olarak girildi ve sınıfın ön yükleyicisi __construct bunları sınıf içerisindeki değişkenlere atandı. __destrcut sihirli metodu ise sınıfın sonunuda yıkıcı, yok edici metod olarak çalıştırılır örneğin bir veri tabanı bağlantısı kuruldu sonra kapatma işini __destruct ile yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class db{ private $data; private $user; private $pass; private $dbBag; function __construct($dbName,$userName,$userPass){ //Sınıf oluşturulurken parametre gönderilmesini istedik $this->data=$dbName; $this->user=$userName; $this->pass=$userPass; //sınıf çağırılırken sınıfı içerisindek değikenlere //göndermiş olduğumuz parametler eklenecek try{ $this->dbBag=new PDO("mysql:host=localhost;dbname=$this->data;charset=utf8",$this->user,$this->pass); $this->dbBag->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Veri tabanı bağlantısı kuruldu"; }catch(PDOException $x){ echo $x->getMessage(); } } function __destruct(){ $this->dbBag=null; echo "<br />Veri tabanı bağlantısı kapandı"; } } $ogrenciSinif=new db("testdata","root",""); //sınıfı çağırdık |
Sınıfı Dizi Yapmak
Sınıfa serialize fonksiyonu uygulandığında sınıf içerisindeki değişkenleri __sleep() php sihirli metodu ile geri göndeririz. Yine serialize edilmiş bir sınıfa unserialize uygulandığında devreye __wakeup() metodu girer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class webMaster{ public $isim; public $soyisim; public function __construct($name,$surname){ $this->isim=$name; $this->soyisim=$surname; echo "__consturct: Yapıcı Metot"; } public function __sleep(){ echo "<br />__sleep: Sınıfa serialize işlemi uygulandı."; return array("isim","soyisim"); } public function __wakeup(){ echo "<br />__wakeup: Sınıfa unserialize işlemi uygulandı."; } public function __destruct(){ echo "</br>__destruct: Yıkıcı Metot"; } } $sinif=serialize(new webMaster("Çağlar","Bostancı")); echo $sinif; $dizi=unserialize($sinif); print_r($dizi); echo $dizi->isim; echo $dizi->soyisim; |
PHP Overloading (Bindirme) __call() __get() __set() Kullanımı
Overloading metorları dinamik olarak oluşturmaktadır. Bu metotlar __call(), __get() ve __set() tir. Kullanım amaçları sinif içerisinde olmayan bir metoda değer verilirse __set() metodu devreye giriyor. Yine olmayan bir metot çağırıldığında ise __call() php sihirli metodu devreye girmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | class webMaster{ public $isim,$soyisim; public function ekle($dizi){ $this->isim=$dizi["isim"]; $this->soyisim=$dizi["soyisim"]; } public function tablo(){ printf(" <table border='1'> <tr>%s</tr> <td>%s</td< </table> ",$this->isim,$this->soyisim); } public function liste(){ printf(" <ul> <li>%s</li> <li>%s</li> </ul> ",$this->isim,$this->soyisim); } public function __set($metot,$dizi){ echo "<br />__set() çalıştı <br /> Yanlış Metot ismi : ".$metot; echo "<br />İsim Eklendi"; $this->ekle($dizi); } public function __call($metot,$isim){ echo "<br />__call() çalıştı <br /> Yanlış Metot ismi : ".$metot; echo "<br />Listeleme Yapıldı."; $this->liste(); } } $veriSinif=new webMaster(); $veri=array("isim"=>"Çağlar","soyisim"=>"Bostancı"); $veriSinif->icerikGir=$veri; $veriSinif->goster(); |
PHP __toString Sihirli Metodunun Kullanımı
Oluşturulan bir sınıf echo vey print fonksiyonları ile ekrana basılmak istendiğinde devreye giren php sihirli metodudur. Bu php sihirli metodu geriye değer dönderdiği için return ile geriye değer aktarılmalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class umitYasarOguzcan{ public function __construct(){ echo "__construct"; } public function __toString(){ return "Sınıfı bu şekilde görütüleyemezsiniz!"; } public function __destruct(){ echo "__destruct"; } } $sinif=new umitYasarOguzcan(); echo $sinif; |
Nesneleri Fonksiyonlaştırma
Oluşturulan bir sınıfı fonksiyon yapsında kullanamak istiyorsanı bu php sihirli metodunu kullanabilirsiniz. Bu metot çok amaçlı olarakta kullanılabilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class COC{ public $dizi=array("Cemal Safi","Özdemir Asaf","Cemal Süreya"); public function __construct(){ echo "__construct <br />"; } public function __invoke($index){ return $this->dizi[$index]; } public function __destruct(){ echo "<br />__destruct"; } } $sinif=new COC(); echo $sinif(1); |