⊗ppOpIfSII 73 of 107 menu

Nhiều giao diện trong OOP PHP

Trong PHP không có tính kế thừa đa cấp - mỗi lớp chỉ có thể có một lớp cha. Tuy nhiên, với các giao diện, mọi thứ lại khác: mỗi lớp có thể triển khai bất kỳ số lượng giao diện nào. Để làm điều này, tên các giao diện cần được liệt kê, phân tách bằng dấu phẩy, sau từ khóa implements.

Đây là một điểm khác biệt nữa giữa giao diện và lớp trừu tượng - bạn có thể triển khai nhiều giao diện, nhưng không thể kế thừa nhiều lớp trừu tượng.

Hãy thử thực hành. Giả sử ngoài giao diện iFigure, chúng ta còn có giao diện iTetragon. Các phương thức của giao diện này sẽ được triển khai bởi các lớp QuadrateRectangle, vì chúng có 4 cạnh, nhưng không phải lớp Disk.

Giả sử giao diện iTetragon mô tả các getter cho cả bốn cạnh của tứ giác:

<?php interface iTetragon { public function getA(); public function getB(); public function getC(); public function getD(); } ?>

Giả sử chúng ta cũng có giao diện iFigure, mà chúng ta đã làm trước đây:

<?php interface iFigure { public function getSquare(); public function getPerimeter(); } ?>

Hãy làm cho lớp Quadrate triển khai hai giao diện. Để làm điều này, chúng ta liệt kê cả hai giao diện, phân tách bằng dấu phẩy, sau từ khóa implements:

<?php class Quadrate implements iFigure, iTetragon { // phần triển khai sẽ ở đây } ?>

Bây giờ chúng ta sẽ phát triển lớp Quadrate của chúng ta, để nó triển khai giao diện iTetragon. Rõ ràng, hình vuông của chúng ta là một trường hợp đặc biệt của tứ giác, bởi vì trong hình vuông tất cả các cạnh đều bằng nhau. Do đó, tất cả các phương thức mới sẽ trả về cùng một giá trị - độ dài cạnh của hình vuông:

<?php class Quadrate implements iFigure, iTetragon { private $a; public function __construct($a) { $this->a = $a; } public function getA() { return $this->a; } public function getB() { return $this->a; } public function getC() { return $this->a; } public function getD() { return $this->a; } public function getSquare() { return $this->a * $this->a; } public function getPerimeter() { return 4 * $this->a; } } ?>

Rõ ràng, trong hình chữ nhật không phải tất cả các cạnh đều bằng nhau, mà chỉ các cạnh đối diện. Trong trường hợp này, các phương thức mới sẽ có sự khác biệt một chút. Và trong một hình thang thì cả 4 cạnh đều sẽ khác nhau.

Tuy nhiên, không quan trọng chúng ta xem xét hình nào - điều quan trọng là tất cả các hình này sẽ có các phương thức được mô tả (ngay cả khi một số hình là trường hợp đặc biệt) và hoạt động theo cùng một kiểu.

Hãy làm cho lớp Rectangle cũng triển khai hai giao diện: cả iFigure, và iTetragon.

Tạo giao diện iCircle với các phương thức getRadiusgetDiameter.

Hãy làm cho lớp Disk cũng triển khai hai giao diện: cả iFigure, và iCircle.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối