Interfejsy a typy wyliczeniowe
Założenie: Pokażemy, jak wykorzystać typy wyliczeniowe w definicjach interfejsów w PHP, aby ograniczyć możliwe wartości stałych interfejsu do predefiniowanego zbioru.
Krok po kroku:
- Definicja typu wyliczeniowego: Zdefiniujmy typ wyliczeniowy reprezentujący status zamówienia.
- Definicja interfejsu z typem wyliczeniowym: Stwórzmy interfejs
Order
, który wykorzystuje zdefiniowany wcześniej typ wyliczeniowy. - Implementacja interfejsu: Zaimplementujmy interfejs
Order
w klasieConcreteOrder
. - Użycie klasy: Utwórzmy obiekt klasy
ConcreteOrder
i sprawdźmy jego działanie.
enum OrderStatus {
case Pending;
case Processing;
case Shipped;
case Delivered;
case Cancelled;
}
Ten kod definiuje typ wyliczeniowy OrderStatus
z pięcioma możliwymi wartościami.
interface Order {
public function getStatus(): OrderStatus;
public function setStatus(OrderStatus $status): void;
}
Interfejs Order
deklaruje metody getStatus()
i setStatus()
, które pracują z typem OrderStatus
. Gwarantuje to, że status zamówienia będzie zawsze jedną z pięciu predefiniowanych wartości.
class ConcreteOrder implements Order {
private OrderStatus $status;
public function __construct(OrderStatus $status) {
$this->status = $status;
}
public function getStatus(): OrderStatus {
return $this->status;
}
public function setStatus(OrderStatus $status): void {
$this->status = $status;
}
}
Klasa ConcreteOrder
implementuje metody zdefiniowane w interfejsie Order
, zapewniając poprawne zarządzanie statusem zamówienia.
$order = new ConcreteOrder(OrderStatus::Pending);
echo "Status zamówienia: " . $order->getStatus()->name . PHP_EOL; // Wyświetli: Status zamówienia: Pending
$order->setStatus(OrderStatus::Shipped);
echo "Status zamówienia: " . $order->getStatus()->name . PHP_EOL; // Wyświetli: Status zamówienia: Shipped
Ten kod demonstruje, jak korzystać z klasy ConcreteOrder
i zmieniać status zamówienia.
Ten przykład pokazuje podstawowe wykorzystanie typów wyliczeniowych w interfejsach w PHP. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z różnymi zastosowaniami!