PHP’ de __invoke() Sihirli Metodu

Php’ de işlerimizi kolaylaştıracak çeşitli sihirli(magic) metodlar vardır. Sihirli metodlar iki alt tire(__construct, __invoke) ile başlarlar. Bu yazıda PHP’ de sıklıkla kullanılan __invoke() metodunu ve kullanımını anlatacağım.

__invoke() :

__invoke metodu sınıf(class) içinde tanımlayacağımız bir metoddur. Sınıftan bir obje ürettikten sonra objeyi fonksiyon gibi çağırırsak çağrılacak metod __invoke() metodudur.

Örnek:

İlk önce Car adında bir sınıf tanımlayacağız.

class Car{

    public function __construct(){
        echo "object created <br>";
    }

    public function __invoke(){
        echo "invoke method called";
    }
}

Bu sınıftan bir obje üretelim. Obje ürettiğimizde __construct metodu çalışacak. Daha sonra objeyi fonksiyon olarak çağırırsak __invoke metodu çalışacaktır.

$obj = new Car();

$obj();

//Çıktı: object created 
//Çıktı: invoke method called 

Objenin callable olup olmadığını çağırmadan önce is_callable() fonksiyonu ile kontrol edebiliriz.

echo is_callable($obj) ? 'yes' : 'no';
//Çıktı : yes 

Callable Typehint

Callable typehint çağrılan şeyin callable olup olmadığını kontrol ederek çalıştırılmasını sağlar. PHP 5.4 ile birlikte gelmiştir. Aşağıda __invoke sihirli metodla nasıl kullanıldığına dair bir kullanım göreceksiniz.

function start_engine(Callable $func) {
    $func();
    return "engine started";
  }

$obj = new Car();

echo start_engine($obj);
//Çıktı: object created 
//Çıktı: invoke method called
//Çıktı: engine started

Başarılar Dilerim …