2013-09-16 105 views
6

Tôi viết dưới đây vào một tệp php duy nhất.PHP không thể mở rộng từ giao diện?

<?php 
interface people 
{ 
    public function take($s); 
} 

class engineer extends people 
{ 
    public function take($s){ 
     echo $s; 
    } 
} 
?> 

Mọi người là giao diện, kỹ sư mở rộng mọi người. Nhưng khi tôi chạy mã này, lỗi:

Fatal error: Class engineer cannot extend from interface people in E:\php5\Mywwwroot\b.php on line 12 

Điều gì đã xảy ra? Phiên bản PHP của tôi là 5.4.

+7

Các lớp triển khai giao diện, không mở rộng giao diện. –

+0

PHP sử dụng phương pháp như Java để ngăn chặn vấn đề kim cương - Xem http://en.wikipedia.org/wiki/Multiple_inheritance - do đó, từ khóa thực hiện –

+0

Cảm ơn tất cả các bạn. Ngu ngốc. –

Trả lời

29

Bạn thực hiện giao diện và mở rộng lớp:

<?php 
interface people 
{ 
    public function take($s); 
} 

class engineer implements people 
{ 
    public function take($s){ 
     echo $s; 
    } 
} 
?> 
+3

Người đàn ông, một số ngày tôi cảm thấy * câm *. Vì một lý do nào đó, lỗi PHP đó không làm tôi nghĩ "oh, tôi đã viết * mở rộng * không * thực hiện *". – bishop

18

extends là cho việc mở rộng tầng lớp khác.

Đối với giao diện, bạn cần sử dụng implements để thay thế.

(Một giao diện có thể extend giao diện khác, mặc dù)

+9

+1 cho 'Giao diện có thể mở rộng giao diện khác, mặc dù ' – Patrick

+0

Nhưng chữ ký phương thức m1 (AInterface $ obj) trong lớp A không thể được ghi đè bởi m1 (BInterface $ obj) thậm chí – vicaba

+0

_" Giao diện có thể được mở rộng như các lớp bằng cách sử dụng mở rộng toán tử. "_ [php.net - interfaces] (http://php.net/manual/en/language.oop5.interfaces.php) – Santi

1

Phụ thuộc vào những gì bạn muốn, nó có thể là:

  • lớp kéo dài Aclass
  • lớp thực hiện anInterface
  • giao diện mở rộng anInterface

Bạn chỉ có thể mở rộng một lớp/giao tiếp ace và triển khai nhiều giao diện. Bạn có thể mở rộng giao diện sang giao diện khác, ví dụ: Giao diện DieselEngineInterface mở rộng EngineInterface.

Cũng muốn lưu ý nhận xét, bây giờ bạn có thể có phân cấp lớp và giao diện, bạn cần phải biết khi nào nên sử dụng chúng.

-1

Tôi sử dụng: interface xyz{…}. Sau đó class abc implements xyz tôi nhận được:

The type xyz cannot be a superinterface of abc; a superinterface must be an interface

OK! nên extendabc từ xyz tôi nhận được:

Class abc cannot extend from interface xyz

chạy trong nhật thực "oxy" php 7 công việc tốt!