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.