Hallo MB,
Interfaces als Marker habe ich auch schon verwendet. Aber eher selten. Sowas tut man meiner Meinung nach, wenn man eine existierende Codebasis hat und es sich nicht erlauben kann, den existierenden Code abzuändern. Was in PHP eher unwahrscheinlich ist.
Deine determinePerson-Funktion hat aber Smell. Du ermittelst eine Kennzahl basierend darauf, ob ein Objekt bestimmte Subinterfaces "implementiert". Ein solche Switch ruft nach einer Lösung mit Polymorphie.
Und ich frage mich, wann dein switch-default zuschlägt. Du hast ein PersonInterface und 3 Sub-Interfaces. Du fragst alle 3 ab. Wie kann der default-Fall eintreffen.
Lösung mit Polymorphie:
interface PersonInterface {
function getPersonType();
}
class WarehouseCustomer implements PersonInterface
{
function getPersonType() { return 1; }
// code
}
class WarehouseServer implements PersonInterface
{
function getPersonType() { return 2; }
// code
}
class WarehouseOwner implements PersonInterface
{
function getPersonType() { return 3; }
// code
}
function determinePerson ( PersonInterface $person ) : int {
// entfällt
}
// statt
$typ = determinePerson($p);
// rufst Du
$typ = $p->getPersonType();
Bzw. es wäre die Frage zu klären, wofür der Typ gebraucht wird und ob man statt der Typ-Abfrage die Polymorphie nicht noch weiter treiben könnte.
Rolf
sumpsi - posui - obstruxi