Mailinglisten-Archive |
Hallo Raffael,
Am Samstag, 5. August 2006 03:54 schrieb Rafael Krysciak:
> Ich würde die Klassen so umschreiben dass sie generell ein Parameter
> als array entgegen nehmen.
> Dann würde deine function so aussehen:
>
> function load ($class, $args = array())
> {
> return new $class($args);
> }
>
> Was meinem die andern?
also den Tip habe ich auch mal gegeben. Ich habe das sogar einmal selbst
komplett so umgesetzt. Davon bin ich allerdings abgekommen. Ich
verwende jetzt für jede öffentliche Objekteigenschaft eine Setter- und
Getter-Methode.
Ich übergebe nichts mehr in einem variablen Array.
Meine Gründe:
1. Wenn man Objekteigenschaften setzt, müssen die gesetzten Werte
ohnehin auf Gültigkeit (Typ, Wertebereich...) überprüft werden.
Übergebe ich die Werte, wie von Dir vorgeschlagen und von mir einmal
bis zum Ende durchexerziert, dann muß ich die Gültigkeitsprüfung
natürlich auch hier durchführen und ggf. noch weitere gewünschte
Operationen. Klassenintern gewinne ich also überhaupt nichts.
2. Ich verliere aber intern an Übersichtlichkeit, weil ich die Prüfung
und Verarbeitung der übergebenen Werte an der Schnittstelle
dynamisieren muß. Der Code in der betreffenden Klasse wird nämlich
komplexer und komplizierter, weil die Flexibilität nach außen hin nach
innen gemappt werden muß.
3. Aber auch das Skript, welches die Objekteigenschaften setzt, wird
nach meiner Erfahrung durch die Übergabe eines Arrays nicht
übersichtlicher gegenüber der Verwendung von Setter-Methoden. Eher im
Gegenteil.
4. Die Verwendung der benötigten Setter-Methoden einer Klasse ist
genauso flexibel wie die Verwendung eines variablen assoziativen
Arrays.
5. Abschließend noch ein eher PHP-spezifisches, auf PHP5
zugeschnittenes, Argument: Wenn Du einfach einen Array an den
Konstruktor übergibst, der die zu setzenden Werte der
Objekteigenschaften enthält, dann beraubst Du Dich der Möglichkeit, das
Type Hinting von PHP5 für die Übergabe der Werte zu nutzen:
http://www.php.net/manual/en/language.oop5.typehinting.php
Das hat allerdings die kleine Einschränkung, daß es nur für Arrays und
Objekte anwendbar ist... Ist also nicht unbedingt das Knallerargument,
aber auch zu beachten.
Viele Grüße
Lutz
php::bar PHP Wiki - Listenarchive