PHP Sihirli Methodlar
Hepinize merhaba dostlarım 😊. Bu yazımda sizlere php programlama dili üzerinde katmanlı mimari (oop) konularından birisi olan sihirli methodlar konusundan bahsedeceğim
Proje geliştirirken normalde karşımıza çıkma ihtimali olan, büyük projelerde veya frameworklerde incelerseniz hemen hemen her yerde kullanılan, yazılım mülakatlarında da karşılaşma ihtimalimizin yüksek olduğu sihirbaz methodlara gelin bir bakalım :).
__construct METHODU
Eveeeet dostlarım geldik sihirli methodlar konumuzun ilk alt başlığı olan __construct methoduna. Bu methodumuz bizim tanımladığımız class içerisinde nesne tanımlanır tanımlanmaz çalışacak olan methodumuzdur. Kullanım yerinden örnek vermemiz gerekirse bir model class ı tanımladığımızda işlem yapacağımız tablonun ismini dinamik bir şekilde nesne oluşturulduğu an hızlıca tanımlanması ve sınıf içerisindeki global değişkene aktarılması işlemi gerektiği durumlarda kullanabiliriz. Hemen gelelim bir örnek yapalım
<?php
class MFSoftwareBlog{
public $name;
public function __construct()
{
$this->name = "MFSoftware Blog";
echo "Constructor Çalıştı <br>";
}
}
$mfs = new MFSoftwareBlog(); // nesne oluştrulduğu an $name değişkenine "MFSoftware Blog" yazısını aktaracak ve sonra "Constructor Çalıştı" mesajını basacak
echo $mfs->name; // ekrana MFSoftware Blog yazacak
şeklinde kodlarımızı yazdık dostlarım. Browser kısmımızda baktığımız zaman karşımıza gelecek olan sonuç
Constructor Çalıştı
MFSoftware Blog
şeklinde olacaktır :).
__destruct METHODU
Destruct methoduna gelecek olursak dostlarım uzun uzun anlatmaktan ziyade işin mantığını anlatayım. Construct methodunun tam tersi işlev görür. Yani class içerisinde en son çalışan methodumuz __destruct methodudur. Gelelim bir örnek yapalım
<?php
class MFSoftwareBlog{
public $name;
public function setName($name){
$this->name = $name;
echo $name."<br>";
}
public function __destruct()
{
echo "Destruct Çalıştı En Son İşlem Tamamlandı<br>";
}
}
$mfs = new MFSoftwareBlog();
$mfs->setName("Muhammed Fatih");
şeklinde kodlarımızı yazdık. Browser kısmımızı açtığımızda ise sayfamıza gelecek çıktımız
Muhammed Fatih
Destruct Çalıştı En Son İşlem Tamamlandı
şeklinde olacaktır. Önce bizim oluşturduğumuz method çalıştı ve en son olarak da __destruct methodu çalıştı :). Bütün işlemler bu kadar.
__call METHODU
Geldik bir diğer methodumuz olan __call methoduna dostlarım :). Bu methodu genelde bir frameworkün genel yapısını incelediğimizde veya büyük projelere denk geldiysek rahat bir şekilde görebiliriz. Genel amacı şu şekildedir. Bizim tanımladığımız class içerisinde olmayan bir methodu çağırma durumunda bu __call methodu çalışır. Gelin bir örnek yapalım
<?php
class Ulasim{
public function __call($name, $arguments)
{
echo $name." İsimli Method Bulunamadı <br><br>";
echo "Method Parametreleri <pre>";
print_r($arguments);
}
}
$ulasim = new Ulasim();
$ulasim->araba("Volkswagen",2010,"1.6 TDI");
şeklinde kodlarımızı yazdık. __call methodu içerisindeki $name parametresi çağırmaya çalıştığımız method ismini, $arguments parametresi de bu çağırmaya çalıştığımız methoda gönderdiğimiz parametreleri ifade eder. Bunları browser kısmında çalıştırdığımızda karşımıza gelecek olan sonuç
araba İsimli Method Bulunamadı
Method Parametreleri
Array
(
[0] => Volkswagen
[1] => 2010
[2] => 1.6 TDI
)
şeklinde olacaktır. Bütün olay bu şekilde :)
__callStatic METHODU
Genel olarak aslında __call methodunun yaptığı işin hemen hemen aynısını yapar. Yalnız buradaki tek farka bakacak olursak __callStatic methodu çağırmaya çalıştığımız statik bir method olmadığı durumda çalışır. Hemen gelelim bir örnek yapalım
<?php
class Account{
public static function __callStatic($name, $arguments)
{
echo $name." İsimli Statik Method Bulunamadı <br><br>";
echo "Method Parametreleri <pre>";
print_r($arguments);
}
}
Account::instagram("account_name","account_password");
şeklinde kodlarımızı yazdık. Browser kısmımıza gelip sayfamızı yenilediğimizde karşımıza gelecek olan sonuç
instagram İsimli Statik Method Bulunamadı
Method Parametreleri
Array
(
[0] => account_name
[1] => account_password
)
şeklinde olacaktır. İşte dostlarım __callStatic methodumuzun amacını da öğrenmiş olduk :)
__get METHODU
İsminden anlamışsınızdır dostlarım hemen hemen her yerde gördüğümüz bir sözcüktür. Kodlama tarafında da buna bakacak olursak bizim class ımızın içerisinde erişilemeyen veya bulunmayan bir değişken, özellik olduğu durumlarda veya erişilemediğinde bu methodumuz tetiklenecektir ve içerisinde yazdığımız işlemler çalışacaktır. Hemen gelelim bir örnek yapalım
<?php
class HR{
private $personal1;
public function __get($name)
{
echo $name." İsimli Değişken Bulunamadı veya Erişilemiyor <br>";
}
}
$hr = new HR();
$hr->personal1; // private olduğu için hata verecek
$hr->personal2; // bulunmadığı için hata verecek
şeklinde kodlarımızı yazdık dostlarım. Daha sonrasında gelip browser sayfamızı yenilediğimizde ekranımıza gelecek olan çıktı
personal1 İsimli Değişken Bulunamadı veya Erişilemiyor
personal2 İsimli Değişken Bulunamadı veya Erişilemiyor
şeklinde olacaktır.
__set METHODU
Get methodunun tam tersi şeklinde çalışan methoddur ki zaten isminden de anlamışsınızdır dostlarım :). Bunun amacı ise bizim class ımızın içerisinde olmayan bir değişkene veya özelliğin değerini değiştirmemiz gerektiğinde bu method tetiklenir. Eğer bu özellikler erişilemez ise veya class içerisinde yok ise bu __set methodu çalışacaktır. Bir önceki işlemeki yani __get methodu örneğinde ufak bir değişiklik yapalım
<?php
class HR{
private $personal1;
public function __set($name, $value)
{
echo $name." İsimli Özellik Bulunamadı veya Erişilemiyor. Atanmak istenen değer: ".$value." <br>";
}
}
$hr = new HR();
$hr->personal1 = "Ali";
$hr->personal2 = "Veli";
şeklinde kodlarımızı yazdık. Browser sayfamıza geldiğimizde sayfamızı yenilediğimizde ekranımıza gelecek olan çıktı
personal1 İsimli Özellik Bulunamadı veya Erişilemiyor. Atanmak istenen değer: Ali
personal2 İsimli Özellik Bulunamadı veya Erişilemiyor. Atanmak istenen değer: Veli
şeklinde olacaktır. Bütün olay bu dostlarım :)
__toString METHODU
Normalde programlama yaparken integer bir veriyi string bir veriye döndürme işlemi yapacağımız zaman kullandığımız bir komut olduğunu hepimiz biliyoruz. Ama oop konusunda sihirli methodlar konusunda da bunu bilmemiz lazım. Çünkü gerek büyük projelerde olsun gerek yazılım mülakatlarında hemen hemen karşılaşacağımız bir methoddur bu.
Methodumuzun genel amacına bakacak olursak dostlarım bizim oluşturduğumuz bir sınıftan nesne oluşturduğumuzda bu nesneyi ekrana bastırmak istediğimizde bu method çalışacaktır. Gelin hızlıca bu örneğimizi de gerçekleştirelim
<?php
class Volkswagen{
public function __toString()
{
return "Benim Favorim Olan Araç";
}
}
$vw = new Volkswagen(); // nesne oluşturalım
echo $vw; // nesneyi yazdıralım
şeklinde kodlarımızı yazdık. Sonrasında ise browser sayfamızı yenilediğimizde ekranımıza gelecek olan çıktı
Benim Favorim Olan Araç
şeklinde çıktımızı rahat bir şekilde göreceğiz dostlarım :). İşte __toString methodumuzun kullanımını da kavramış olduk
__invoke METHODU
Bu methodu ilk defa görmüş olabilirsiniz dostlarım anlıyorum ben de ilk gördüğüm zaman şaşırmıştım :). Bu methodumuzun genel amacı bizim class ımızdan ürettiğimiz nesnemizi fonksiyon gibi kullanmamız gerektiği durumlarda rahatlıkla kullanabiliriz. Hemen gelelim bunu da bir örnekle inceleyelim
<?php
class Insan{
public function __invoke($param)
{
echo "Nesne Fonksiyon Gibi Çalıştırılmaya Başlandı. <br><b>Parametreler: </b>".$param;
}
}
$h = new Insan();
$h("MFSoftware Blog");
şeklinde kodlarımızı yazdık. Daha sonrasında ise browser sayfamızı açıp kodlarımıza baktığımızda karşımıza gelecek olan sonuç
Nesne Fonksiyon Gibi Çalıştırılmaya Başlandı.
Parametreler: MFSoftware Blog
şeklinde olacaktır. İşte nesnemizi bir fonksiyon gibi kullanıp içerisine parametre gönderdik ve bizim için __invoke methodu çalıştı ve ekranımıza yukarıdaki gibi bizim oluşturduğumuz sonuçları bastırdı :). Bütün işlemlerimiz bu kadar dostlarım :)
__clone METHODU
Gelelim sihirli methodlar konumuzun son başlığı olan __clone methodu kullanımına dostlarım :). Clone methoduna bakacak olursak bizim oluşturduğumuz nesneyi klonlayıp başka bir değişkene aktarmamız gerektiği durumlarda çalışacak olan methoddur. Normalde ben hiç kullanmadım ama bilmemizde fayda var. Ne olur ne olmaz en basitinden yazılım mülakatlarında karşımıza bir şekilde çıkabilir o yüzden iyi kavramamız lazım. Sözü daha fazla uzatmadan hemen kodlama kısmına geçelim ve bir örnek yapalım
<?php
class Klonla{
public function __clone()
{
echo "Nesne Klonlandı";
}
}
$clone = new Klonla();
$clone2 = clone $clone; // nesnemizi klonladık
şeklinde kodlarımızı yazdık. Sonrasında ise browser kısmını açıp yenilediğimizde ekranımıza gelecek olan çıktı
Nesne Klonlandı
şeklinde olacaktır. __clone methodumuzun işlevini de rahatça anlamış olduk
Eveeeet dostlarım 😊. Bu yazımda sizlere PHP programlama dili üzerinde OOP mimarisi konularından olan sihirli methodlar konusunu elimden geldiğince dilim döndüğünce anlatmaya çalıştım. Umarım faydalı olmuşumdur. Eksik veya hatalı bir anlatım yapmış isem benimle iletişime geçmekten çekinmeyin :). Konu başlarda biraz karmaşık veya zor gelmiş olabilir dostlarım anlıyorum. Özellikle öğrenme süreci içerisinde bu şekilde zorlukların olması doğaldır. Bu süreç içerisinde sizlerden istediğim şey her yazımın altında da dediğim gibi "İstikrarlı ve Azimli Olmalısınız, Bolca Pratik Yapmalısınız". Bu dediklerimi hayat felsefeniz yaptığınız sürece başarı sizler için kaçınılmaz olacaktır.
Hayallerinizi gerçekleştirmeniz ve güzel yerlere gelmeniz dileklerimle... İyi çalışmalar dilerim :)
Yazar Hakkında
Kendi Halinde Bir Backend Developer