Interfejsy a programowanie funkcyjne

Założenie: Pokażemy, jak interfejs może definiować typ funkcji i jak to ułatwia programowanie funkcyjne w PHP.

Krok po kroku:

  1. Definicja interfejsu: Zdefiniujmy interfejs określający funkcję, która przyjmuje liczbę i zwraca jej kwadrat.
  2. 
    interface SquareCalculator {
      public function calculate(int $number): int;
    }
    				

    Ten kod definiuje interfejs SquareCalculator z metodą calculate, która przyjmuje liczbę całkowitą i zwraca liczbę całkowitą (kwadrat liczby wejściowej).

  3. Implementacja interfejsu: Zaimplementujmy ten interfejs w klasie.
  4. 
    class MySquareCalculator implements SquareCalculator {
      public function calculate(int $number): int {
        return $number * $number;
      }
    }
    				

    Klasa MySquareCalculator implementuje interfejs SquareCalculator, zapewniając implementację metody calculate.

  5. Użycie funkcji anonimowej: Użyjmy funkcji anonimowej zgodnej z interfejsem.
  6. 
    $anonymousCalculator = function(int $number): int {
      return $number * $number;
    };
    
    //Sprawdzenie typu
    if ($anonymousCalculator instanceof SquareCalculator) {
        echo "Funkcja anonimowa jest zgodna z interfejsem!";
    } else {
        echo "Funkcja anonimowa NIE jest zgodna z interfejsem!";
    }
    
    

    Tworzymy funkcję anonimową, która spełnia wymagania interfejsu SquareCalculator. Później sprawdzamy czy jest zgodna z interfejsem za pomocą `instanceof`.

  7. Wywołanie funkcji: Wywołajmy funkcję (zarówno klasową jak i anonimową) i wyświetlmy wynik.
  8. 
    $calculator = new MySquareCalculator();
    echo "Wynik (klasa): " . $calculator->calculate(5) . "\n"; // Wyświetli 25
    echo "Wynik (funkcja anonimowa): " . $anonymousCalculator(5) . "\n"; // Wyświetli 25
    				

    Ten kod pokazuje, jak wywołać metodę calculate zarówno z obiektu klasy, jak i z funkcji anonimowej.

Ten przykład pokazuje podstawowe zastosowanie interfejsów do definiowania typów funkcji w PHP, co jest przydatne w programowaniu funkcyjnym. Zachęcamy do dalszego zgłębiania tematu!

Dodaj komentarz 0

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