Poznajemy metodę magiczną invoke, która pozwala nam wywołać obiekt klasy niczym funkcję. Możemy znać ją już z Laravela i tzw. invokable controllers, ale jest to element języka PHP, nie jakiś wymysł Laravelowy. Poznajmy ją.

Oto nasz przykład z poprzedniej lekcji:

<?php 

class URL {
    
    private function __construct(
        public $url, 
        public $response_code){}

    public static function getURL($url, $response_code=302){
        if(filter_var($url, FILTER_VALIDATE_URL)){
            return new URL($url, $response_code);
        }
    }
}

$url = URL::getURL("https://www.google.com", 302);

Dodamy do niego metodę __invoke, która wywoła nam przekierowanie pod wskazany adres z odpowiednim kodem http, jeżeli obiekt zostanie wywołany niczym funkcja:

<?php 

class URL {
    
    private function __construct(
        public $url, 
        public $response_code){}

    public static function getURL($url, $response_code=302){
        if(filter_var($url, FILTER_VALIDATE_URL)){
            return new URL($url, $response_code);
        }
    }
    public function __invoke(){
        header("Location: {$this->url}");
        http_response_code($this->response_code);
        exit;
    }
}

$url = URL::getURL("https://www.google.com", 302);
$url();

To wszystko. Nasz obiekt może być teraz wywołany i wykonywać to, co zdefiniowaliśmy w invoke.