Interfejsy a typy never
Założenie: Pokażemy, jak wykorzystać typ never
w interfejsie PHP, aby wskazać, że metoda nigdy nie zwróci wartości, np. zawsze rzuca wyjątek.
Krok po kroku:
- Definicja interfejsu z metodą zwracającą `never`: Zdefiniujmy interfejs
DataValidator
z metodąvalidate
, która zawsze rzuca wyjątek. - Implementacja interfejsu: Zaimplementujmy interfejs
DataValidator
w klasieAgeValidator
. - Użycie klasy: Spróbujmy użyć klasy
AgeValidator
.
interface DataValidator {
public function validate(mixed $data): never;
}
W tym kroku definiujemy interfejs DataValidator
z metodą validate
. Typ zwracanej wartości to never
, co oznacza, że metoda nigdy nie zwróci wartości. Zawsze będzie rzucać wyjątek.
class AgeValidator implements DataValidator {
public function validate(mixed $data): never {
if (!is_int($data) || $data < 0) {
throw new InvalidArgumentException("Wiek musi być liczbą całkowitą nieujemną.");
}
// Kod, który nigdy nie zostanie wykonany po rzuceniu wyjątku
}
}
Klasa AgeValidator
implementuje interfejs DataValidator
. Metoda validate
sprawdza, czy dane wejściowe są liczbą całkowitą nieujemną. Jeśli nie, rzuca wyjątek InvalidArgumentException
. Ponieważ metoda zawsze rzuca wyjątek, typ zwracanej wartości jest never
.
$validator = new AgeValidator();
try {
$validator->validate(-5);
} catch (InvalidArgumentException $e) {
echo "Wyjątek: " . $e->getMessage();
}
try {
$validator->validate(25);
} catch (InvalidArgumentException $e) {
echo "Wyjątek: " . $e->getMessage();
}
Ten kod demonstruje użycie klasy AgeValidator
. Pierwsze wywołanie metody validate
z nieprawidłowymi danymi spowoduje rzucony wyjątek. Drugie wywołanie z poprawnymi danymi nie rzuci wyjątku (chociaż kod po `throw` nigdy się nie wykona).
Ten przykład pokazuje, jak używać typu never
w interfejsach PHP, aby wyraźnie wskazać, że metoda nigdy nie zwróci wartości. To poprawia czytelność i bezpieczeństwo kodu.
Zachęcamy do dalszego zgłębiania tematu interfejsów i typów w PHP!