Như hakre tuyên bố, đúc để người dùng định nghĩa loại không natively thể trong PHP (theo như tôi biết).
gì bạn có thể làm là tạo ra một phương pháp trong một trong hai lớp A hoặc B. Một cái gì đó như:
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 */
}
}
hoặc
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 */
}
}
Trong ví dụ đầu tiên factory method đầu tiên có thể có vấn đề, vì nó yêu cầu A có kiến thức cụ thể về một lớp con cụ thể. Bạn cần phải xác định xem điều này là mong muốn trong tình huống của bạn. Có lẽ bạn có thể tóm tắt điều này để phương thức factory chấp nhận đối tượng kế thừa từ A, giống như phương thức factory thứ hai.
Trong ví dụ thứ hai, B tự động đã biết về A, bởi vì nó kế thừa từ nó. Điều này có thể được mong muốn hơn. Nhưng hãy nghĩ về nó, điều này thậm chí có thể đã được thực hiện trong A, vì vậy mà phương thức này sẽ tự động có sẵn trong tất cả các lớp con của A rồi.
Nguồn
2011-08-19 15:39:21
Xin lỗi vì ví dụ mơ hồ ... Tôi đã cố gắng đơn giản hóa những gì tôi đã làm có lẽ quá nhiều. Tôi muốn minh họa rằng 'B' cung cấp các phương thức bổ sung không tồn tại trong 'A'. 'B' cũng ghi đè một số phương thức từ 'A' trong mã thực của tôi. Tôi có thể sao chép logic trong các phương pháp ghi đè và sau đó chỉ cần bỏ gọi phương thức 'foo' của cha mẹ chút nào đó, nhưng đó là rất nhiều sự trùng lặp. –