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が特定のサブクラスに関する具体的な知識を持っている必要があるため、最初のファクトリメソッドは問題になる可能性があります。これが自分の状況で望ましいかどうかを判断する必要があります。おそらく、これを抽象化して、2番目のファクトリメソッドのように、ファクトリメソッドがAから継承するすべてのオブジェクトを受け入れるようにすることができます。
2番目の例では、BはAを継承しているため、Aを自動的に認識しています。これはより望ましいかもしれません。しかし、考えてみると、これはすでにAにも実装されている可能性があり、その結果、メソッドはすでにAのすべてのサブクラスで自動的に使用可能になります。