Как указано hakre , приведение к пользовательским типам изначально не возможно в PHP (насколько я знаю).
Что вы можете сделать, это создать метод в любом классе Aили B. Что-то вроде:
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 */
}
}
или
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 */
}
}
В первом примере первый фабричный метод может быть проблематичным, поскольку он требует, чтобы A имел бетонзнание о конкретном подклассе.Вам нужно определить, желательно ли это в вашей ситуации.Возможно, вы могли бы абстрагироваться от этого, чтобы фабричный метод принял любой объект, который наследуется от A, как и второй фабричный метод.
Во втором примере B автоматически уже знает об A, потому что оннаследует от него.Это может быть более желательным.Но если подумать, это может быть уже реализовано и в A, так что метод уже автоматически доступен во всех подклассах A.