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:

  1. Definicja interfejsu z metodą zwracającą `never`: Zdefiniujmy interfejs DataValidator z metodą validate, która zawsze rzuca wyjątek.
  2. 
    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.

  3. Implementacja interfejsu: Zaimplementujmy interfejs DataValidator w klasie AgeValidator.
  4. 
    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.

  5. Użycie klasy: Spróbujmy użyć klasy AgeValidator.
  6. 
    $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!

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *