Come hakre dichiarato, lanciando ai tipi definiti dall'utente non è nativamente possibile in PHP (per quanto ne so).
Che cosa si potrebbe fare è creare un metodo sia in classe A o B. Qualcosa di simile:
class A
{
public static function fromB(B $object)
{
/* your routine to convert an object of class B to an instance of class A */
}
/* or */
public static function fromA(A $object)
{
/* your routine to convert any object that is a subclass of A to a concrete instance of class A */
}
}
o
class B
extends A
{
// this method could even be implemented in A already as well actually
public function toA()
{
/* your routine to convert this object to an object of class A */
}
}
Nel primo esempio la prima factory method può essere problematico, dal momento che richiede A di avere conoscenze concrete su una sottoclasse specifica. Hai bisogno di determinare se questo è desiderabile nella tua situazione. Forse potresti astrarre questo per avere il metodo factory accettare qualsiasi oggetto che eredita da A, come il secondo metodo factory.
Nel secondo esempio, B conosce già automaticamente A, poiché ne eredita. Questo potrebbe essere più desiderabile. Ma a pensarci bene, questo potrebbe anche essere già implementato in A, così che il metodo sia già disponibile automaticamente in tutte le sottoclassi di A.
fonte
2011-08-19 15:39:21
Scusate per l'esempio vago ... Ho cercato di semplificare quello che stavo facendo forse troppo. Intendevo illustrare che "B" fornisce metodi extra che non esistono in "A". 'B' sovrascrive anche alcuni metodi da 'A' nel mio codice attuale. Potrei duplicare la logica nei metodi sovrascritti e quindi chiudere semplicemente chiamando il metodo "pippo" padre, ma questa è stata un'enorme duplicazione. –