Merbaha arkadaşlar,
Php oop dersleri eğitim setimize kaldığımız yerden devam ediyoruz. Bir önceki yazımızda autoload kullanımından bahsetmiştik. Bu dersimizde ise oop mimarisinde overloading konusunu işleyeceğiz. Overloading nedir önce bir onu açıklayarak konumuza giriş yapalım. Overloading: aynı isimde birden çok metot veya argüman tanımlama özelliğidir. Sınıf içerisinde olmayan bir değişkene değer atamak da diyebiliriz. PHP‘nin overloading konusu diğer nesne tabanlı programlama dillerinden çok daha farklı bir yapıya sahiptir.
“Sınıf içerisinde olmayan bir değişkene değer atamak” derken neyi kastettiğimi basit bir örnekle anlatayım.
<?php class overloading { } $overloading = new overloading(); $overloading->deneme = "php"; echo $overloading->deneme; ?>
Bu kodu çalıştırdığınızda ekrana “php” çıktısını verecektir. Burada sizin de dikkatinizi çektiği gibi sınıf içerisinde deneme adında bir değişken tanımlamadığımız halde bu değişkene değer atayabiliyoruz. Overloading’i tanım olarak böyle de anlatabiliriz. Ancak bu şekilde bir kullanım doğru değildir. Hataları minimize etmek ve ileride oluşabilecek sorunların önüne geçmek için overloading konusunda PHP’nin bize sunmuş olduğu bazı metotlar bulunmaktadır. Bu metotlar: __get __set __isset __unset __call ve __callStatic metotlarıdır. Bu metotların bazıları parametre aldığı gibi bazıları da void olarak yani parametresiz olarak çalışabilir. Burada ki bazı metotlar, size sihirbaz metotlar konumuzdan tanıdık gelebilir 🙂 Hatta bu metotlara da sihirbaz metot demek doğru olur.
Overloading konusunda kullanacağımız metotları önce kısa kısa açıklayacak olursak eğer:
__get: Sınıf içerisinde olmayan bir değişkenden veri almaya çalıştığımızda tetiklenen metot.
__set: Sınıf içerisinde olmayan bir değişkene veri atamaya çalıştığımızda tetiklenen metot.
__isset: Sınıf içerisinde olmayan bir değişken veya metot için isset ve empty kontrolleri yapıldığında tetiklenen metot.
__unset: Sınıf içerisinde olmayan bir değişken için unset komutu çağrıldığında tetiklenir.
__call: Sihirbaz metotlar konumuzdan hatırlayacağınız üzere sınıf içerisinde olmayan bir metot çağrıldığında tetiklenen metot.
__callStatic: Bir üstte ki metodumuzla aynı işi yapar ancak static olarak çalışmaktadır.
Bu metotlarımızı kullanabilmek için hepsinin public olarak tanımlanması gerekir. __callStatic hariç tabi ki 🙂 Açıkçası overloading konusu sürekli kullanabileceğimiz bir özellik değil. Ancak çok karışık parametrelerin gelmesi gereken sınıflarda olmazsa olmaz bir özellik ve kesinlikle kullanılması gerekir. Şimdi basit bir örnekle overloading kullanımını daha iyi anlayalım.
<?php class Overloading { // Overloading yapılacak değişken private $data = []; // Overloading set edecek olan metodumuz public function __set($key, $val){ $this->data[$key] = $val; } // Overloading get edecek metodumuz public function __get($key){ if(array_key_exists($key, $this->data)){ return $this->data[$key]; } } // Overloading isset kontrolu yapacak metodumuz public function __isset($key){ return isset($this->data[$key]); } // Overloading unset edecek metodumuz public function __unset($key){ unset($this->data[$key]); } // Overloading call metodumuz public function __call($key, $detail){ echo $key." adında metodun değeri:\n"; print_r($detail); } // Overloading callStatic metodumuz public static function __callStatic($key, $detail){ echo $key." adında metodun değeri:\n"; print_r($detail); } } $overloading = New Overloading(); $overloading->dil = "php"; $overloading->konu = "overloading"; echo $overloading->dil; echo "<br/>"; echo $overloading->konu; echo "<br/>"; $overloading->olmayanmetot(); echo "<br/>"; unset($overloading->dil); $overloading->deneme = array(1,2,3,4,5); print_r($overloading->deneme); ?>
Şimdi ne yaptığımıza tekrar bir bakalım. Sınıf içerisinde olmayan dil ve konu değişkenlerine değer atarken __set metodu tetikleniyor ve bu metodumuz oluşturduğumuz oluşturduğumuz $data dizisine bu değişkenleri ekliyor. echo $overloading->dil dediğimiz zaman da __get metodu tetikleniyor ve çağırdığımız değişkeni geri döndürüyor. $overloading->olmayanmetot() dediğimizde sınıf içerisinde ki __call metodu tetikleniyor.Son olarak da unset($overloading->dil) dediğimiz de ise __unset metodu tetikleniyor.
PHP‘de overloading konusu bundan ibarettir arkadaşlar. Umarım faydalı olur bir sonraki yazımda görüşmek üzere. İyi çalışmalar dilerim 🙂
İlk Yorumu Siz Yapın