Poznajemy modyfikator dostępu private tworząc prywatny konstruktor oraz poznajemy, czym są metody statyczne na podstawie przykładu klasy URL napisanej wcześniej. Do dzieła.

Oto nasza klasa URL z promocją konstruktora:

<?php 

class URL {
    
    public function __construct(
        public $url, 
        public $response_code=302){}
}
$url = new URL("https://www.google.com", 302);

Prywatne metody to takie, które są dostępne tylko wewnątrz klasy. Prywatny konstruktor wręcz sprawi, że nie można utworzyć obiektu danej klasy.

Zróbmy prywatny konstruktor:

<?php 

class URL {
    
    private function __construct(
        public $url, 
        public $response_code=302){}
}
$url = new URL("https://www.google.com", 302);

Teraz będziemy mieć fatal error – nie można utworzyć obiektu danej klasy poza klasą. Z pomocą przyjdą metody statyczne.

Metody statyczne wywołujemy przez klasę, nie potrzebując mieć utworzonego obiektu.

Taka metoda może skorzystać z konstruktora prywatnego i zwrócić wynik:

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

Metoda statyczna nie wymaga obiektu, odwołujemy się do niej po nazwie klasy i tzw. scope resolution operator (::).

Ta metoda może użyć konstruktora (słówko kluczowe new i nazwa klasy), nawet jeżeli on jest prywatny, ponieważ znajduje się wewnątrz klasy.

Tutaj metoda sprawdza, czy URL jest prawidłowy i jeżeli tak, zwraca wynik wywołania swojego prywatnego konstruktora.