⊗ppOpIfII 74 of 107 menu

Kế thừa từ lớp và triển khai giao diện trong OOP PHP

Một lớp có thể kế thừa từ một lớp khác và đồng thời triển khai một giao diện nào đó. Hãy xem xét một ví dụ thực tế.

Giả sử chúng ta muốn tạo một lớp Programmer, mà nó sẽ có tên, lương và danh sách các ngôn ngữ mà lập trình viên biết. Hiện tại mô tả lớp của chúng ta khá mơ hồ: vâng, trong lớp sẽ có tên, lương, ngôn ngữ - nhưng những phương thức nào sẽ có trong lớp của chúng ta?

Hãy mô tả lớp của chúng ta một cách chính xác hơn bằng cách sử dụng giao diện iProgrammer:

<?php interface iProgrammer { public function __construct($name, $salary); public function getName(); public function getSalary(); public function getLangs(); public function addLang($lang); } ?>

Giả sử chúng ta đào sâu vào các lớp đã được triển khai của chúng ta và, hóa ra, chúng ta đã có một lớp tương tự là Employee. Nó không triển khai tất cả các phương thức của lớp Programmer, nhưng là một phần. Đây là mã của lớp đã tồn tại của chúng ta:

<?php class Employee { private $name; private $salary; public function __construct($name, $salary) { $this->name = $name; $this->salary = $salary; } public function getName() { return $this->name; } public function getSalary() { return $this->salary; } } ?>

Hợp lý trong trường hợp của chúng ta là làm sao để lớp mới Programmer của chúng ta kế thừa một phần các phương thức cần thiết cho chính nó từ lớp Employee (và phần còn lại chúng ta sẽ triển khai ngay trong chính lớp mới):

<?php class Programmer extends Employee { } ?>

Đồng thời chúng ta biết rằng lớp Pogrammer phải triển khai giao diện iProgrammer:

<?php class Programmer implements iProgrammer { } ?>

Hãy kết hợp việc kế thừa từ lớp Employee và việc triển khai giao diện iProgrammer:

<?php class Programmer extends Employee implements iProgrammer { } ?>

Kết quả là lớp Pogrammer của chúng ta sẽ kế thừa từ lớp Employee các phương thức __construct, getNamegetSalary, còn các phương thức addLanggetLangs chúng ta sẽ phải tự triển khai:

<?php class Programmer extends Employee implements iProgrammer { public function addLang($lang) { // triển khai } public function getLangs() { // triển khai } } ?>

Giao diện iProgrammer không quan tâm, các phương thức là gốc của lớp hay được kế thừa - điều chính là tất cả các phương thức được mô tả phải được triển khai.

Hãy sao chép mã lớp Employee của tôi và mã giao diện iProgrammer. Đừng sao chép phần khung lớp Programmer của tôi - hãy tự mình triển khai lớp này mà không nhìn vào mã của tôi.

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