Tach!
function __set($name, $value) { $stringProperties = ['foo', 'bar']; $arrayProperties = ['qux', 'baz']; if (in_array($name, $stringProperties) and is_string($value)) { $this->$name = $value; } else if (in_array($name, $arrayProperties) and is_array($value)) { $this->$name = $value; } else { // Fehlerbehandlung } }
Wenn nun String und/oder Array-Eigenschaften hinzukommen, dann muss nur noch deren Name ins jeweilige Array eingetragen werden. Zudem weisen nun die Namen $stringProperties und $arrayProperties deutlich darauf hin, was für ein Typ beabsichtigt ist.
Mir fiel grad noch ein, dass die eigentliche Frage sein sollte, ob die Typprüfung zur Laufzeit sinnvoll ist oder eher weniger. Aber die kann ich nicht beantworten, das musst du mit deinem Anwendungsfall abstimmen. Ich kann nur ein paar Gedanken zwecks Abwägung geben.
Laufzeitprüfungen sind dann sinnvoll, wenn der Typ oder Inhalt zur Laufzeit variabel oder ungesichert sein können. Das sind zum Beispiel einige der Eingaben, beispielsweise vom Anwender oder von aderen Quellen kommend.
Zudem kann man sich die Frage stellen, ob die Typprüfung auch fachlich unabdingbar ist. Was passiert wenn da was mit falschem Typ kommt? Wenn der Anwender Müll eingibt, kann er zwar erwarten, dass die Anwendung souverän damit umgeht und nicht abstürzt, aber nicht unbedingt, dass dabei was sinnvolles rauskommt.
Laufzeitprüfungen sind aber weniger sinnvoll, wenn der Typ zur Entwicklungszeit sichergestellt werden kann oder zumindest von der IDE als problematisch angekreidet wird. Das ist zum Beispiel dann der Fall, wenn es lediglich darum geht, Aufmerksamkeitsfehler des Programmierers abzufangen. Das kann und sollte man zur Entwicklungszeit korrigieren. IDEs, die Codeanalyse eingebaut haben, sind hierzu ein passendes Werkzeug.
Wenn also eine Eigenschaft keine weiteren Einschränkungen hat, als dass der Typ sicherzustellen ist, dann ist im Prinzip ein PHPDoc-Kommentar mit Typangabe ausreichend, wenn mir dann alle Verwendungen angekreidet werden, an denen der zu übergebende Wert nicht eindeutig ist.
dedlfix.