Chúng ta có thể triển khai nhiều giao diện trong php không?

Tuyên bố từ chối trách nhiệm. Các mẫu mã và API có sẵn tại www. liên kết hướng dẫn. com có ​​sẵn hoàn toàn miễn phí. Bạn có thể tự chịu rủi ro khi sử dụng nó cho mục đích thương mại cũng như phi thương mại, nhưng bạn không thể sử dụng nó để đăng trên blog hoặc các trang web hướng dẫn khác tương tự như www. liên kết hướng dẫn. com mà không đưa link tham chiếu đến bài viết gốc.
Tất cả các mẫu mã và API do tác giả cung cấp đều là sáng tạo của họ và cả tác giả cũng như trang web đều không chịu trách nhiệm nếu nó không hoạt động như dự kiến.

Tôi đồng ý với các điều khoản trên


Giao diện cho phép chúng ta chỉ định tập hợp các phương thức mà một lớp phải triển khai.
Nó bao gồm các phương thức và hằng số trừu tượng.

Để khai báo giao diện ta sử dụng từ khóa "giao diện". Cú pháp của nó như sau.

giao diện interfaceName{
         //các phương thức trừu tượng
}
lớp con triển khai interfaceName{< . Ví dụ sau giải thích tương tự
//method implementation
//may have its own methods
}

A class can implement more than one interface.Following example explains the same





Sau khi thực hiện, đầu ra sẽ như sau



giải thích.

  • Trong đoạn mã PHP ở trên, chúng ta có hai giao diện, kỳ thi và điểm danh. Chúng có các phương thức trừu tượng phần trăm_cal() và apercent_cal().
  • Học sinh trong lớp thực hiện cả hai giao diện bằng cách sử dụng từ khóa thực hiện. Nếu một lớp cài đặt một giao diện, nó phải định nghĩa các phương thức trừu tượng, ngoài các phương thức riêng của nó
  • Trong PHP 5 trở lên, hàm tạo không giống với tên lớp, cách chúng ta làm theo trong Java và PHP 4. Thay vào đó, nó là một chức năng đặc biệt được chỉ định bằng hai dấu gạch dưới (một chức năng kỳ diệu)
  • Chúng tôi sử dụng từ khóa này để chỉ phiên bản hiện tại của lớp
  • Mã này chấp nhận tên sinh viên, điểm cho hai môn học được tổ chức và tham dự các lớp học để tính tỷ lệ chuyên cần

Video thực hiện


Bài đăng này đã hơn 18 tháng tuổi. Do công nghệ thay đổi quá nhanh nên nội dung này có thể lỗi thời (nhưng không phải lúc nào cũng vậy). Hãy nhớ xác minh bất kỳ thông tin kỹ thuật hoặc lập trình nào với bản phát hành hiện tại

Mọi lập trình viên PHP đều biết rằng bạn không thể mở rộng nhiều lớp với PHP. Bạn chỉ có thể làm một - đó là tốt. Trên thực tế, nếu bạn cần nhiều mã chia sẻ hơn, hãy đảm bảo tập trung vào việc sử dụng các đặc điểm thay thế

Tuy nhiên, điều mà tôi không nhận ra cho đến gần đây là Giao diện PHP có thể mở rộng nhiều giao diện khác. (Tôi thừa nhận, tôi không phải là một lập trình viên dựa trên hợp đồng cho đến gần đây. ) Hãy để tôi chỉ cho bạn ý của tôi

interface Talks { public function say(string $message); } interface Eats { public function putInMouth(FoodObject $food); } interface Human extends Talks, Eats { public function singsOffKey(SongObject $song); }

Bây giờ, khi bạn có một đối tượng triển khai giao diện /* Define an interface called "Rotatable". */ interface Rotatable { /* Interface methods must be public and without the body. */ public function rotateRight(float $angle); public function rotateLeft(float $angle); } 2, nó sẽ phải xác định các phương thức /* Define an interface called "Rotatable". */ interface Rotatable { /* Interface methods must be public and without the body. */ public function rotateRight(float $angle); public function rotateLeft(float $angle); } 3 và /* Define an interface called "Rotatable". */ interface Rotatable { /* Interface methods must be public and without the body. */ public function rotateRight(float $angle); public function rotateLeft(float $angle); } 4 bên cạnh phương thức /* Define an interface called "Rotatable". */ interface Rotatable { /* Interface methods must be public and without the body. */ public function rotateRight(float $angle); public function rotateLeft(float $angle); } 5. Khá ngọt ngào

Hãy cùng tìm hiểu Giao diện là gì, cách sử dụng chúng (có ví dụ) và chúng khác với lớp trừu tượng như thế nào

nội dung

  • Giao diện là gì và chúng hoạt động như thế nào trong PHP?
  • Cách kiểm tra giao diện của một lớp. class_implements()
  • Cú pháp giao diện và quy tắc
  • Giao diện và kế thừa
  • Triển khai nhiều giao diện
  • Giao diện so với các lớp trừu tượng

Giao diện là gì và chúng hoạt động như thế nào trong PHP?

Giao diện đối tượng, hoặc chỉ giao diện, là các cấu trúc PHP xác định một tập hợp các phương thức

Các lớp có thể thực hiện các giao diện. Khi một lớp triển khai một giao diện, lớp đó cũng phải triển khai tất cả các phương thức của giao diện

Các giao diện tương tự như các lớp trừu tượng, nhưng có một số khác biệt quan trọng

Quan trọng nhất, các giao diện chỉ có thể định nghĩa các hằng số và phương thức công khai. Hơn nữa, các giao diện chỉ xác định chữ ký của các phương thức (nghĩa là tên của phương thức và danh sách đối số), mà không có triển khai thực tế

Các giao diện được định nghĩa tương tự như các lớp, nhưng bạn phải sử dụng từ khóa giao diện thay vì từ khóa lớp

Hãy xem ngay một ví dụ

/* Define an interface called "Rotatable". */ interface Rotatable { /* Interface methods must be public and without the body. */ public function rotateRight(float $angle); public function rotateLeft(float $angle); }

Xoay là một giao diện

Nó chứa hai phương pháp. xoayRight() và rotateLeft()

Khi một lớp triển khai giao diện Xoay, lớp đó cũng phải triển khai các phương thức này

Ý tưởng là nếu một lớp thực hiện Xoay có nghĩa là nó có thể xoay trái và phải, và do đó nó phải cung cấp các phương thức giao diện

 

Vì vậy, làm thế nào để bạn sử dụng một giao diện, trong thực tế?

Giả sử bạn có một ứng dụng web lập kế hoạch nhà bếp. (Bạn biết đấy, một trong những ứng dụng mà bạn có thể thiết kế và lên kế hoạch cho căn phòng của mình)

Một nhà bếp có thể chứa các đồ vật. tường, các thiết bị như tủ lạnh và lò nướng bánh, bàn, ghế, v.v.

Một số đồ vật này, chẳng hạn như bàn và ghế, có thể xoay được. Những thứ khác, như tường và tủ lạnh, không thể

Mỗi đối tượng nhà bếp có một lớp PHP tương ứng. Những cái có thể xoay được thực hiện giao diện Xoay được

Như thế này

/* The "implements" keyword makes a class implement an interface. */ class Table implements Rotatable { /* All the interface's methods must be implemented in the class. */ public function rotateRight(float $angle) { //… } public function rotateLeft(float $angle) { //… } } class Chair implements Rotatable { public function rotateRight(float $angle) { //… } public function rotateLeft(float $angle) { //… } }

 

Các lớp Bàn và Ghế thực hiện giao diện Xoay

Khi họ làm như vậy, họ cũng phải thực hiện các phương thức giao diện, nghĩa là. xoayRight() và rotateLeft()

Do đó, đối với mọi lớp triển khai Xoay, bạn luôn có thể gọi các phương thức rotateRight() và rotateLeft()

Ví dụ

$table = new Table(); $chair = new Chair(); $kitchen = [$table, $chair]; foreach ($kitchen as $kitchenObject) { $kitchenObject->rotateRight(90); }

 

Bây giờ, bạn có thể hỏi. chúng ta không thể định nghĩa rotateLeft() và rotateRight() bên trong một lớp trừu tượng, rồi để Table and Chair kế thừa từ lớp đó sao?

Vâng, về mặt kỹ thuật, vâng

Tuy nhiên, nếu bạn làm như vậy thì tất cả các lớp có thể xoay vòng cần kế thừa từ cùng một lớp cơ sở. Nhưng đây không phải lúc nào cũng là một giải pháp tốt

Ví dụ, cả bàn và máy nướng bánh mì đều có thể xoay, nhưng chúng không có điểm chung nào. Sẽ không hợp lý nếu chúng kế thừa từ cùng một lớp cơ sở, phải không?

Vấn đề ngược lại cũng tồn tại

Ví dụ: máy nướng bánh mì và tủ lạnh đều là “thiết bị gia dụng” và việc chúng kế thừa từ một loại thiết bị cơ sở chung là điều hợp lý. Nhưng trong khi lò nướng bánh có thể xoay được thì tủ lạnh lại không thể

Các giao diện giải quyết vấn đề này, bởi vì các lớp có thể thực hiện chúng bất kể các lớp cha của chúng

Cách kiểm tra giao diện của một lớp. class_implements() .

Làm thế nào để bạn biết nếu một lớp thực hiện một giao diện cụ thể?

Bạn có thể sử dụng hàm class_implements()

Hàm này lấy một đối tượng hoặc một tên lớp làm đối số của nó và trả về một mảng các giao diện được triển khai bởi lớp đó

Ví dụ

/* A class that does not implement Rotatable. */ class Wall {} $table = new Table(); /* Implements Rotatable. */ $wall = new Wall(); /* Does not implement Rotatable. */ $tableInterfaces = class_implements($table); $wallInterfaces = class_implements($wall); echo "Table interfaces: "; print_r($tableInterfaces); echo "<br><br>"; echo "Wall interfaces: "; print_r($wallInterfaces); echo "<br><br>";

đầu ra sẽ là

Table interfaces: Array ( [Rotatable] => Rotatable ) Wall interfaces: Array ( )

 

Bằng cách sử dụng chức năng này, bạn chỉ có thể gọi một cách có chọn lọc các phương thức của giao diện trên các đối tượng triển khai nó

Như thế này

$table = new Table(); $chair = new Chair(); $wall = new Wall(); $kitchen = [$table, $chair, $wall]; foreach ($kitchen as $kitchenObject) { if (in_array('Rotatable', class_implements($kitchenObject))) { /* Only $table and $char arrive here. */ $kitchenObject->rotateRight(90); } }

Cú pháp giao diện và quy tắc

Hãy tóm tắt những gì bạn đã học được cho đến nay

  • Từ khóa giao diện xác định giao diện PHP mới
  • Từ khóa thực hiện làm cho một lớp thực hiện một giao diện

Giao diện chỉ có thể chứa

  • Các phương thức công khai, chỉ có chữ ký của chúng (tên và danh sách đối số) và không có phần thân
  • hằng số công khai

 

Ghi chú. Giao diện PHP không có hàm tạo

 

Khi một lớp cài đặt một giao diện, lớp đó phải cài đặt tất cả các phương thức của giao diện đó

Có một ngoại lệ. nếu một lớp trừu tượng cài đặt một giao diện, thì nó không cần cài đặt tất cả các phương thức của giao diện. Tuy nhiên, những đứa trẻ không trừu tượng của lớp đó phải hoàn thành việc thực hiện

Ví dụ

/* An interface with a constant and two methods. */ interface Colors { const DEFAULT_COLOR = 'green'; public function changeColor(string $newColor); public function getColor(); } /* This abstract class implements one interface method only. */ abstract class Color implements Colors { private $color; public function getColor() { return $this->color; } } /* This child class completes the implementation of the other interface method. */ class MyColor extends Color { public function changeColor(string $newColor) { echo 'Color set to: ' . $newColor; } }

 

Các hằng số của giao diện trở nên khả dụng trong các lớp triển khai nó

Ví dụ

$myColor = new MyColor(); echo "Default color: " . MyColor::DEFAULT_COLOR; echo "<br>"; $myColor->changeColor('red'); Default color: green Color set to: red

Giao diện và kế thừa

Các giao diện có thể sử dụng tính kế thừa giống như các lớp, với sự khác biệt là các giao diện kế thừa từ các giao diện khác

Chỉ để làm cho nó rõ ràng. giao diện chỉ có thể kế thừa từ các giao diện khác chứ không phải từ các lớp

Kế thừa trong giao diện tuân theo các quy tắc giống như kế thừa lớp. Đặc biệt, các phương thức và hằng số được kế thừa từ giao diện cha

Ví dụ

/* Define an interface called "Rotatable". */ interface Rotatable { /* Interface methods must be public and without the body. */ public function rotateRight(float $angle); public function rotateLeft(float $angle); } 0

Triển khai nhiều giao diện

Một lớp PHP có thể triển khai nhiều giao diện

Để làm được điều đó, bạn cần phân tách các tên giao diện bằng dấu phẩy

Ví dụ

/* The "implements" keyword makes a class implement an interface. */ class Table implements Rotatable { /* All the interface's methods must be implemented in the class. */ public function rotateRight(float $angle) { //… } public function rotateLeft(float $angle) { //… } } class Chair implements Rotatable { public function rotateRight(float $angle) { //… } public function rotateLeft(float $angle) { //… } } 0

 

Ghi chú

Nếu hai giao diện cung cấp cùng một phương thức, bạn không thể triển khai cả hai giao diện trong cùng một lớp, trừ khi cả hai phương thức đều có cùng đối số

Ví dụ: đoạn mã sau sai vì hai phương thức rotateRight() nhận các đối số khác nhau

PHP có thể triển khai nhiều giao diện không?

Tính năng của Giao diện trong PHP . Một giao diện không thể có các phương thức phi trừu tượng. A class can have the implementation of multiple interfaces. An interface cannot have non-abstract methods.

Bạn có thể triển khai nhiều giao diện không?

Một lớp có thể triển khai nhiều giao diện cùng lúc . Một lớp chỉ có thể mở rộng một lớp, nhưng triển khai nhiều giao diện. Một giao diện có thể mở rộng một giao diện khác, theo cách tương tự như một lớp có thể mở rộng một lớp khác.

Bạn có thể triển khai bao nhiêu giao diện?

Một lớp có thể triển khai bất kỳ số lượng giao diện nào , cho phép một lớp có nhiều hành vi.

Bạn có thể thêm nhiều giao diện trên cùng một lớp không?

một lớp java có thể triển khai nhiều giao diện . Các interface gốc được khai báo trong danh sách được phân tách bằng dấu phẩy, sau từ khóa implements. Xem bên dưới, ví dụ mã hoàn chỉnh, cách lớp chim triển khai nhiều giao diện trong java.

Chủ đề