Mam jeden obiekt PHP5 przekazujący wiadomości do innego i chciałbym dołączyć typ do każdej wiadomości. Na przykład: MSG_HOT
, MSG_WARM
i MSG_COLD
. Jeśli PHP5 miał typ wyliczeniowy, prawdopodobnie użyłbym tego do zdefiniowania typów wiadomości, ale (o ile się nie mylę) nie ma takiego zwierzęcia. Szukałem w kilku opcjach:Alternatywa dla typów wyliczeniowych w PHP5?
smyczki ('MSG_HOT'
, 'MSG_WARM'
i 'MSG_COLD'
) są złe, ponieważ chciałbym nieuchronnie wpisać coś 'MSG_WRAM'
i rzeczy pęknie. Liczby cierpią na ten sam problem i są również mniej jasne.
Definiuje praca:
define('MSG_HOT', 1);
define('MSG_WARM', 2);
define('MSG_COLD', 3);
ale zanieczyszczać globalnej przestrzeni nazw, a więc wymaga nazwy Bardziej szczegółowa, aby zapewnić niepowtarzalność. Wolałbym, aby mój kod nie był zaśmiecony takimi rzeczami jak APPLICATIONNAME_MESSAGES_TYPE_HOT
.
Wreszcie mogę używać nazw klas rozróżnić typy, tak:
class MessageHot extends Message {}
class MessageWarm extends Message {}
class MessageCold extends Message {}
class Message
{
public function Type()
{
return get_class($this);
}
public function Data()
{
return $this->data;
}
public function __construct($data)
{
$this->data = $data;
}
private $data;
}
To jest dobre, myślę, ale jest też dużo pracy za to, co wydaje się, że to powinno być proste pojęcie .
Czy brakuje mi lepszej alternatywy?
Użyjesz tego w ten sposób: 'Message :: HOT'. Uważam również, że "Wiadomość" powinna być zadeklarowana jako "abstrakcyjna". – philfreo
O ile oczywiście klasa Message jest używana dla więcej rzeczy niż tylko utrzymywanie stałych, takich jak 'Message :: Send (" bla bla ", Message :: HOT);' –