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.
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,
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.