Python bietet mir die Möglichkeit, Klassen so zu definieren, daß Objekte nur die Attribute aufnehmen, die ich vorher festgelegt habe. Dafür steht mir __slots__ zur Verfügung. Wenn ich einem Objekt, das diesen Mechanismus nutzt nun Werte zuweise, wird dies akzeptiert, solange ich mich an die Definition halte. Versuche ich jedoch ein neues Attribut anzulegen, wird der Interpreter mit einer Fehlermeldung abbrechen.
Es darf natürlich nicht verschwiegen werden, daß es auch Nachteile gibt, die speziell auch abgeleitete Klassen betreffen. Das soll aber an dieser Stelle nicht weiter interessieren, da wir uns ja mit PHP beschäftigen wollen und diese Technik für Objekte, die wie structs arbeiten, allemal interessant ist.
Ein entsprechendes Beispiel sieht etwa so aus:
Um diese Mechanismus zu implementieren, habe ich eine Klasse namens slotObject geschrieben:
Die Idee für diese Lösung ist, etwas zu implementieren, das wie __slot_arbeitet, aber auch in extends verwendet werden kann.
Ich muß zugegeben, daß dieser Mechanismus (im Gegensatz zum Original in Python) nur wirksam ist, solange man die Methode set verwendet und der übergebene Paramter eine Assoziatives array ist. Ansonsten kann man den Objekten natürlich Attribute zuweisen, ohne behindert zu werden.
Aber wofür ist das eigentlich gut? Ein mögliches Anwendungsbeispiel habe ich im Artikel extract () und include () beschrieben.
Have fun!