Kolejna magiczna metoda, tym razem określająca w jaki sposób zostanie zaprezentowany obiekt, jeżeli spróbujemy go potraktować jako string – rzutując do napisu albo próbując drukować przez echo.

Nasza klasa URL:

<?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();

Piszemy magiczną metodę toString:

<?php 

class URL {
    
    //(...)

    public function __toString()
    {
        return "This object will redirect you to {$this->url} with status code {$this->response_code}";
    }
}

$url = URL::getURL("https://www.google.com", 302);
echo $url;
//This object will redirect you to https://www.google.com with status code 302

Jak widać, nic trudnego.