1unitedpower: assoziative Werte mit __set() und Index in numerisches array einfügen?

Beitrag lesen

Oder, du benutzt PHPDoc-Annotationen, damit wird der Code sogar noch kürzer als deine ursprüngliche Fassung und viele Programme können damit umgehen:

Ich hab erwähnt das ich öffentliche Methoden die verändert werden können nicht mag. Ich kenn mich, ich renn dann kopflos in irgendwas rein.

Genau das ist der Punkt, ich hab den Vorschlag gemacht, weil du damit vermeiden kannst, in solche Stolperfallen zu laufen. Nehmen wir mal an, du machst beim Programmieren einen Fehler und weist einer Eigenschaft einen unerlaubten Wert zu:

$foobar = new FooBar();
$foobar->fuz= 42; // Defekt: Eigentlich wird hier ein String erwartet.

So wie du die Klasse FooBar implementiert hast, würde der Defekt unbemerkt bleiben. $foobar->foo wäre danach einfach undefiniert. Das nennt sich auch Fail-Silent-System. Das System bleibt stumm, der Fehler bleibt unerkannt.

Das kann man verbessern, indem man eine Exception in der __set-Methode wirft, wenn der Typ von $value kein String ist. Dann fällt der Fehler auf, sobald man den obigen Code ausführt.

Mit PHPDoc-Kommentaren, würde schon dein Editor den Rotstift in der Zeile $foobar->fuz = 42; ansetzen und dir mitteilen, dass es da einen Typfehler gibt.