PHP Sihirli Methodlar

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 :)

Muhammed Fatih BAĞCIVAN
Yazar Hakkında

Kendi Halinde Bir Backend Developer

Önceki YazıCodeIgniter View Yükleme
Sonraki YazıLaravel Query Builder İşlemi -4-
Yorumlar (0)
Bu Yazıya Ait Hiçbir Yorum Bulunamadı (veya admin onaylamadı). İlk Yorum Yapan Sen Ol
Yorum Yapabilirsiniz