Khái niệm tôi đang nghĩ đến xuất phát từ giao diện Traversable. Giao diện này không thể được triển khai trực tiếp, nhưng thay vào đó là thỏa mãn bằng cách thực hiện một giao diện mở rộng nó.PHP có triển khai tiếp xúc cho các giao diện trừu tượng không?
Tôi có thể tuyên bố giao diện không thể triển khai và thay vào đó mở rộng với giao diện công khai không?
Chỉnh sửa: Tôi nhận thấy khả năng sẽ là vô nghĩa vì nó có thể bị phá vỡ bởi bên thứ ba tạo giao diện có thể mở rộng giao diện cơ sở. Tôi đang tìm một cách rõ ràng hơn để thể hiện tính đa hình.
Ví dụ:
abstract interface Vehicle
{
}
interface Car extends Vehicle
{
public function drive(RouteProvider $routeProvider, $speed)
}
interface Boat extends Vehicle
{
public function sail(BodyOfWater $water, $heading);
}
class PeopleMover
{
public function move(Vehicle $vehicle)
{
if ($vehicle instanceof Boat) {
// move people across bodies of water
} elseif ($vehicle instanceof Car) {
// move people along roads
}
}
}
Không, nhưng bạn có thể không chỉ tuyên bố một giao diện trống 'Xe' trống rỗng và đạt được điều tương tự không? Bạn đang dựa vào các bên thứ ba không mở rộng/thực hiện nó anyway. –
ví dụ lạ. tại sao bạn không đưa ra một tên chung cho các phương pháp? –
@KarolyHorvath vì ví dụ này khá đơn giản, các phương thức sẽ có các đối số bắt buộc khác nhau. ví dụ. phương thức 'drive' có thể cần một dịch vụ khám phá tuyến và phương thức' sail' có thể cần biết cơ thể của nước. Hai đối tượng trong ví dụ của tôi có thể quá gần để thể hiện những gì tôi làm. 'Traversable' với' Iterator' và 'IteratorAggregate' là những gì tôi muốn đạt được khi họ làm những việc khác nhau nhưng có thể đạt được kết quả tương tự nếu bạn biết những gì bạn đang làm việc. –