Was ist der richtige OO-Weg, um ein Objekt in eine seiner Unterklassen umzuwandeln (kovarianter Rückgabetyp)?

8

Ich habe eine Unterklasse, die eine Unterklasse des Rückgabetyps ihrer Elternklasse zurückgeben muss. Ich glaube, dies wird als kovarianter Rückgabetyp bezeichnet. Ich frage mich, der einfachste Weg, von der Eltern zu der Kindklasse zu konvertieren.

%Vor%     
aw crud 19.08.2011, 15:09
quelle

3 Antworten

8

In PHP können Sie Objekte vom Typ / Klasse A nicht in B umwandeln, wenn eine Funktion in der Sprache verfügbar ist.

Sie können dies jedoch tun, indem Sie die Serialisierung verwenden, wenn Ihre Objekte dies unterstützen (normalerweise unterstützen einfache alte PHP-Objekte die Serialisierung). In der seralisierten Form ändern Sie die Klasse des Objekts und deserialisieren es erneut. A ist dann zu B geworden. Aber das ist nicht wirklich fließend.

    
hakre 19.08.2011, 15:12
quelle
2

Dies sollte eigentlich ein Kommentar sein, aber ich werde einen wichtigen Punkt machen.

Programmierung ist Engineering und Programmierung ist Design. Es gibt keine Möglichkeit zu sagen, warum Design A besser ist als Design B, ohne zu wissen, wie es verwendet wird. Frage einen Designer, ob dein Submit-Button rot oder grün ist - und sie sagt: hmm, wo, auf welcher Seite? Fragen Sie einen Ingenieur, ob Sie einen Balken oder ein Getriebe verwenden sollten - und die Antwort wird lauten: hängt davon ab, für was. Also, was bringt Sie auf die Idee, dass wir Ihnen einen aussagekräftigen Design-Ratschlag geben können, wenn Sie uns nur eine "BrokenCar" -Klasse mit einer "foo" -Methode geben. Sagen Sie uns, was Sie damit eigentlich erreichen wollen, sonst ist die einzige Antwort, die ich mir vorstellen kann,

Der beste Weg foo zu benutzen ist bar

    
user187291 19.08.2011 15:22
quelle
2

Als hakre , Casting zu benutzerdefinierten Typen ist in PHP nicht möglich (soweit ich weiß).

Was Sie tun könnten, ist eine Methode in Klasse A oder B zu erstellen. Etwas wie:

%Vor%

oder

%Vor%

Im ersten Beispiel kann die erste Factory-Methode problematisch sein, da A ein konkretes Wissen über ein bestimmtes Wissen benötigt Unterklasse. Sie müssen feststellen, ob dies in Ihrer Situation wünschenswert ist. Vielleicht könnten Sie dies abstrahieren, damit die Factory-Methode jedes -Objekt akzeptiert, das von A wie die zweite Factory-Methode erbt.

Im zweiten Beispiel kennt B automatisch bereits A, weil es von ihm erbt. Dies könnte wünschenswerter sein. Aber wenn man darüber nachdenkt, könnte dies sogar schon in A implementiert werden, so dass die Methode automatisch in allen Unterklassen von A bereits verfügbar ist.

    
Decent Dabbler 19.08.2011 15:39
quelle

Tags und Links