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.