PHP - Giao diện là gì?
Giao diện cho phép bạn chỉ định những phương thức nào mà một lớp nên thực hiện.
Các giao diện giúp dễ dàng sử dụng nhiều lớp khác nhau theo cùng một cách. Khi một hoặc nhiều lớp sử dụng cùng một giao diện, nó được gọi là "đa hình".
Các giao diện được khai báo với từ khóa interface
:
Cú pháp
PHP - Giao diện so với các lớp trừu tượng
Giao diện tương tự như các lớp trừu tượng. Sự khác biệt giữa các giao diện và các lớp trừu tượng là:
- Các giao diện không thể có thuộc tính, trong khi các lớp trừu tượng có thể
- Tất cả các phương thức giao diện phải được công khai, trong khi các phương thức lớp trừu tượng được công khai hoặc được bảo vệ
- Tất cả các phương thức trong giao diện đều trừu tượng, vì vậy chúng không thể được thực hiện trong mã và từ khóa trừu tượng là không cần thiết
- Các lớp có thể triển khai giao diện trong khi kế thừa từ một lớp khác cùng một lúc
PHP - Sử dụng giao diện
Để thực hiện giao diện, một lớp phải sử dụng từ khóa implements
.
Một lớp thực hiện giao diện phải thực hiện tất cả các phương thức của giao diện.all of the interface's methods.
Thí dụ
$animal->makeSound[];
?>
Hãy tự mình thử »
Từ ví dụ trên, hãy nói rằng chúng tôi muốn viết phần mềm quản lý một nhóm động vật. Có những hành động mà tất cả các động vật có thể làm, nhưng mỗi con vật làm điều đó theo cách riêng của nó.
Sử dụng giao diện, chúng ta có thể viết một số mã có thể hoạt động cho tất cả các động vật ngay cả khi mỗi con vật cư xử khác nhau:
Thí dụ
public function
makeSound[] {
echo " Bark ";
}
}
Hãy tự mình thử »
public function makeSound[] {
echo " Squeak ";
}
}
Từ ví dụ trên, hãy nói rằng chúng tôi muốn viết phần mềm quản lý một nhóm động vật. Có những hành động mà tất cả các động vật có thể làm, nhưng mỗi con vật làm điều đó theo cách riêng của nó.
$cat = new Cat[];
$dog = new Dog[];
$mouse = new Mouse[];
$animals = array[$cat, $dog, $mouse];
Sử dụng giao diện, chúng ta có thể viết một số mã có thể hoạt động cho tất cả các động vật ngay cả khi mỗi con vật cư xử khác nhau:
foreach[$animals as $animal] {
$animal->makeSound[];
}
?>
Hãy tự mình thử »
Từ ví dụ trên, hãy nói rằng chúng tôi muốn viết phần mềm quản lý một nhóm động vật. Có những hành động mà tất cả các động vật có thể làm, nhưng mỗi con vật làm điều đó theo cách riêng của nó.
Sử dụng giao diện, chúng ta có thể viết một số mã có thể hoạt động cho tất cả các động vật ngay cả khi mỗi con vật cư xử khác nhau:
// lớp định nghĩa class Cat thực hiện động vật {& nbsp; hàm công khai [] {& nbsp; & nbsp; & nbsp; tiếng vang "meow"; & nbsp; }}
Giao diện đối tượng cho phép bạn tạo mã chỉ định phương thức nào một lớp phải thực hiện, mà không phải xác định cách thực hiện các phương thức này. Giao diện chia sẻ một không gian tên với các lớp và đặc điểm, vì vậy chúng không được sử dụng cùng tên.
Các giao diện được xác định theo cách tương tự như một lớp, nhưng với từ khóa interface
thay thế từ khóa class
và không có bất kỳ phương thức nào có nội dung của chúng được xác định.
Tất cả các phương thức được khai báo trong một giao diện phải được công khai; Đây là bản chất của một giao diện.
Trong thực tế, các giao diện phục vụ hai mục đích bổ sung:
- Để cho phép các nhà phát triển tạo các đối tượng của các lớp khác nhau có thể được sử dụng thay thế cho vì chúng thực hiện cùng một giao diện hoặc giao diện. Một ví dụ phổ biến là nhiều dịch vụ truy cập cơ sở dữ liệu, nhiều cổng thanh toán hoặc các chiến lược bộ đệm khác nhau. Các triển khai khác nhau có thể được hoán đổi mà không yêu cầu bất kỳ thay đổi nào đối với mã sử dụng chúng.
- Để cho phép một hàm hoặc phương thức chấp nhận và hoạt động trên một tham số phù hợp với giao diện, trong khi không quan tâm đến những gì đối tượng có thể làm hoặc cách nó được thực hiện. Các giao diện này thường được đặt tên như
Iterable
,Cacheable
,Renderable
hoặc vì vậy để mô tả tầm quan trọng của hành vi.
Các giao diện có thể xác định các phương thức ma thuật để yêu cầu thực hiện các lớp để thực hiện các phương thức đó.
Ghi chú::
Mặc dù chúng được hỗ trợ, bao gồm các hàm tạo trong giao diện không được khuyến khích mạnh mẽ. Làm như vậy làm giảm đáng kể tính linh hoạt của đối tượng thực hiện giao diện. Ngoài ra, các nhà xây dựng không được thực thi bởi các quy tắc thừa kế, có thể gây ra hành vi không nhất quán và bất ngờ.
implements
Để thực hiện giao diện, toán tử implements
được sử dụng. Tất cả các phương thức trong giao diện phải được thực hiện trong một lớp; Không làm như vậy sẽ dẫn đến một lỗi nghiêm trọng. Các lớp có thể triển khai nhiều hơn một giao diện nếu muốn bằng cách tách từng giao diện bằng dấu phẩy.
Cảnh báo
Một lớp có thể triển khai hai giao diện xác định một phương thức có cùng tên, chỉ khi khai báo phương thức trong cả hai giao diện là giống hệt nhau.
Cảnh báo
Một lớp có thể triển khai hai giao diện xác định một phương thức có cùng tên, chỉ khi khai báo phương thức trong cả hai giao diện là giống hệt nhau.
Ghi chú::
Mặc dù chúng được hỗ trợ, bao gồm các hàm tạo trong giao diện không được khuyến khích mạnh mẽ. Làm như vậy làm giảm đáng kể tính linh hoạt của đối tượng thực hiện giao diện. Ngoài ra, các nhà xây dựng không được thực thi bởi các quy tắc thừa kế, có thể gây ra hành vi không nhất quán và bất ngờ.
Ghi chú::
Mặc dù chúng được hỗ trợ, bao gồm các hàm tạo trong giao diện không được khuyến khích mạnh mẽ. Làm như vậy làm giảm đáng kể tính linh hoạt của đối tượng thực hiện giao diện. Ngoài ra, các nhà xây dựng không được thực thi bởi các quy tắc thừa kế, có thể gây ra hành vi không nhất quán và bất ngờ.
implements
0
Để thực hiện giao diện, toán tử implements
được sử dụng. Tất cả các phương thức trong giao diện phải được thực hiện trong một lớp; Không làm như vậy sẽ dẫn đến một lỗi nghiêm trọng. Các lớp có thể triển khai nhiều hơn một giao diện nếu muốn bằng cách tách từng giao diện bằng dấu phẩy.
Cảnh báo
Một lớp có thể triển khai hai giao diện xác định một phương thức có cùng tên, chỉ khi khai báo phương thức trong cả hai giao diện là giống hệt nhau.
implements
1
implements
2
implements
3Một lớp thực hiện giao diện có thể sử dụng một tên khác cho các tham số của nó so với giao diện. Tuy nhiên, kể từ Php 8.0, ngôn ngữ hỗ trợ các đối số có tên, có nghĩa là người gọi có thể dựa vào tên tham số trong giao diện. Vì lý do đó, chúng tôi khuyến nghị các nhà phát triển sử dụng cùng tên tham số giống như giao diện đang được triển khai.
implements
4
interface
implements
6Các giao diện có thể được mở rộng như các lớp sử dụng toán tử mở rộng.
implements
4
interface
implements
9Lớp thực hiện giao diện phải khai báo tất cả các phương thức trong giao diện với chữ ký tương thích.
makeSound[]
0
class
makeSound[]
2Nó có thể cho các giao diện có hằng số. Hằng số giao diện hoạt động chính xác như hằng số lớp. Trước Php 8.1.0, chúng không thể bị ghi đè bởi một lớp/giao diện kế thừa chúng.
makeSound[]
3
makeSound[]
4
makeSound[]
5Ví dụ
makeSound[]
6
interface
makeSound[]
8Ví dụ về giao diện số 1
Ví dụ #2 Giao diện có thể mở rộng ¶
Ví dụ #3 Di truyền giao diện nhiều
makeSound[]
9
interface
0
interface
1
interface
2Ví dụ #4 Giao diện với hằng số ¶
Ví dụ #5 Giao diện với các lớp trừu tượng
interface
3
Ví dụ #6 mở rộng và thực hiện đồng thời ¶
Một giao diện, cùng với các khai báo loại, cung cấp một cách tốt để đảm bảo rằng một đối tượng cụ thể chứa các phương thức cụ thể. Xem InstanceOf toán tử và khai báo loại.
interface
4
interface
5
interface
6