Merhaba arkadaşlar,
Php oop derslerimize kaldığımız yerden devam ediyoruz. Bir önceki yazımızda oop mimarisinde gizlilik kavramını ele almıştık. Bu dersimizde ise sihirbaz metotları inceleyeceğiz. Öncelikle sihirbaz metot nedir onu bir açıklayarak konumuza giriş yapalım. Sihirbaz metot sınıf ve olay çevresinde çalışan php dili ile tanımlı olarak gelen metotlardır. Sihirbaz metotların sadece sınıf içerisinde kullanıldığı gibi yanlış bir bilgi oluşmasın kesinlikle. Sınıf dışında da bazı sihirbaz metotları kullanabilmek mümkündür. Bazı sihirbaz metotların geliştiriciler tarafından çok fazla kullanıldığını söylemek doğru değil ancak bazı gerekli durumlarda kesinlikle kullanılması kanaatindeyim. Php 5 ile gelen toplam 15 adet sihirbaz metot bulunmaktadır.
Sihirbaz metotların önünde __ işlevi bulunur ve sihirbaz olmayan metotların önüne __ işlevi koyulması php tarafından önerilmez. İleride sorunlar çıkarabilir. Bu dipnottan sonra konumuza dönecek olursak biz bu yazımızda 4 adet sihirbaz metodu inceleyeceğiz. Sihirbaz metotların hepsi public olarak tanımlanmak zorundadır. Dilerseniz ilk sihirbaz metodumuzla başlayalım.
__construct()
__construct() metodu bir sınıf çağrıldığı anda çalışan metodumuzdur. Bu metodumuzu php oop dersleri giriş dersimizde yapıcı metot olarak adlandırmıştık. Basit bir örnek ile olayı netleştirelim.
<?php class OopDersleri { public function __construct(){ echo "OopDersleri sınıfı çalıştı."; } } $oop = New OopDersleri(); ?>
Bu betiği çalıştırdığımızda “OopDersleri sınıfı çalıştı” çıktısını verecektir. __construct() sihirbaz metodu nerelerde kullanılır ? ne işimize yarayacak ? diye soracak olursanız bu metodumuz genelde türediği sınıfın metotlarına erişmek, sınıf kullanılmadan önce yapılması gereken temizleme vb. gibi işlemler için kullanılır.
__destruct()
__destruct() metodu ise __construct() metodunun aksine sınıf en son işlemi yaptığında yani sınıf bittiğinde çalışan metottur. Bu metodumuza da oop giriş dersimizde yıkıcı metot demiştik. Şimdi bir önceki sihirbaz metodumuz ve __destruct() metodumuzu kullanarak bir örnek yapalım.
<?php class OopDersleri { public function __construct(){ echo "OopDersleri sınıfı çalıştı."; } public function __destruct(){ echo "OopDersleri sınıfı bitti."; } } $oop = New OopDersleri(); ?>
Bu betiği çalıştırdığımızda ise “OopDersleri sınıfı çalıştı.OopDersleri sınıfı bitti.” çıktısını verecektir.
__toString
Bu sihirbaz metodumuz sınıf objesini direk ekrana bastığımızda, obje değeri yerine istediğimiz bir içeriğin veya argümanın çıkmasını sağlar. Bir objeyi direk ekrana basmak da nereden çıktı diyecek olursanız eğer hemen kısa bir örnekle önce onu açıklayalım.
<?php class OopDersleri { } $oop = New OopDersleri(); echo $oop; ?>
Burada echo $oop koduyla objeyi direk ekrana bastık. Ancak bu kodumuz bize bir hata döndürdü. Şimdi basit bir örnekle _toString sihirbaz metodumuzun ne işe yaradığına bir bakalım.
<?php class OopDersleri { public $name = "OopDersleri Sınıfı"; public function __toString(){ return $this->name; } } $oop = New OopDersleri(); echo $oop; ?>
Bu betiğimiz bize “OopDersleri Sınıfı” çıktısını verecektir. Bu metodumuzu da aslında sınıfın adını ve sınıfın özelliklerini ekrana basmak için kullanıyoruz.
__call
Bu sihirbaz metodumuz ise sınıf içerisinde olmayan bir metodu veya argümanı çağırdığımız zaman çalışan metodumuzdur. Genellikle hata metni oluşturmak için kullanılır. __call sihirbaz metodu diğerlerinden farklı olarak iki adet parametre alır. Hemen bir örnek ile konumuzu netleştirelim.
<?php class OopDersleri { public function __call($name, $attr){ echo $name. " adlı metot bulunamadı."; } } $oop = New OopDersleri(); $oop->yaz(); ?>
Bu betiğimiz bize çıktı olarak “yaz adlı metot bulunamadı.” çıktısını verecektir. Eğer burada __call sihirbaz metodunu kullanmamış olsaydık sınıf içerisinde olmayan bir metodu çağırdığımız için derleyicimiz hata verecekti.
Php oop dersleri sihirbaz metotlar konumuz bu kadar arkadaşlar. Yazının başında bahsettiğim 15 adet sihirbaz metodu incelemek için http://php.net/manual/tr/language.oop5.magic.php adresini kullanabilirsiniz . Ancak şimdilik başlangıç olarak bu kadarını bilmemiz yeterlidir. İlerleyen yazılarımızda yine bazı sihirbaz metotları ele alacağız. Umarım faydalı olur bir sonraki yazımızda görüşmek üzere 🙂
Sonunda __destruct ve __construct metotlarını çözebildim. Teşekkürler
Rica ederim kardeşim faydalı olduysa ne mutlu bana 🙂
Dostum selam. Öncelikle eline sağlık, severek ve öğrenerek ilerliyorum sayende. Hiç girmediğim bir alanda o kadar tane tane anlatmışsın ki, öğrenebiliyorum. Şu son örnekte __call metodunun ne işe yaradığını anlamadım. Çünkü sanırım örnekte bir sorun var. Bir eksik olmalı. OopDersleri sınıfının içerisinden yaz() metodunu çağırmışsın ama benim gördüğüm kadarıyla o metot orada yok. Yanlış mı yüklendi acaba filan diye üç beş defa refresh yaptım ama hala eksik. Kodu koymayı unutmuş olabilir misin? Gerçekten de bu metodun ne işe yaradığını anlayamadım kusuruma bakma lütfen. Senin derslerinden takip edioyurm oop’yi, lütfen bir cevap 🙁
Merhaba, Dediğiniz gibi yaz metodu sınıf içerisinde yok. Sınıf içerisinde olmayan bir metoda ulaşmak istediğinizde ölümcül hata verir değil mi normal şartlarda ? Ama burada hiç bir hata vermiyor ve bizim tanımlamış olduğumuz “yaz adlı metot bulunamadı” uyarısını veriyor. İşte bunun sebebi __call metodunu kullanmış olmamız. “OopDersleri sınıfının içerisinden yaz() metodunu çağırmışsın ama benim gördüğüm kadarıyla o metot orada yok.” burada zaten konuyu özet geçmişsiniz. Tam olarak bu işe yarıyor aslında. Yukarıda ki kodların aynısını __call metodunu kaldırıp çalıştırdığınızda çok daha iyi anlayacağınızı umuyorum 🙂