Sự khác biệt chính giữa lớp trừu tượng và giao diện trong PHP là gì?

Một lớp trừu tượng là một lớp có ít nhất một phương thức trừu tượng. Một phương thức trừu tượng là một phương thức được khai báo, nhưng không được triển khai trong mã. Lớp kế thừa lớp trừu tượng này cần định nghĩa phương thức đó. Phải có một từ khóa trừu tượng phải được trả về trước lớp này để nó là một lớp trừu tượng. Vì vậy, chúng ta không thể tạo các đối tượng từ các lớp trừu tượng. Thay vào đó, chúng ta cần tạo các lớp con thêm mã vào phần thân của các phương thức và sử dụng các lớp con này để tạo các đối tượng. Có thể có nhiều hơn một phương thức có thể không được xác định

// abstract class
abstract class DataAccess {
public $varAbstract;
protected $varHost;
// this abstract method confirm need to define in child class
abstract function db_connect[];
protected function getResultArray[]{
}
}
Giao diện

Hãy nghĩ về một giao diện như một khuôn mẫu hoặc hợp đồng cho các lớp cụ thể của bạn. Lớp hoàn toàn trừu tượng được gọi là giao diện. Bất kỳ lớp nào triển khai giao diện này đều phải sử dụng từ khóa implements và tất cả các phương thức được khai báo trong lớp phải được định nghĩa tại đây. mặt khác, lớp này cũng cần được định nghĩa là trừu tượng. 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”

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
Triển khai Tóm tắt và giao diện

Nếu chúng ta cố gắng khởi tạo lớp

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
8 như một đối tượng độc lập

Vì vậy, chúng ta không thể tạo các đối tượng từ các lớp trừu tượng. Thay vào đó, chúng ta cần tạo các lớp con thêm mã vào phần thân của các phương thức và sử dụng các lớp con này để tạo các đối tượng

$cDataAccess = new Data_Access;

Nó sẽ ném lỗi sau

PHP Fatal error:  Uncaught Error: Cannot instantiate abstract class Data_Access ...// Concrete class extend abstract and implement interfacesclass Customers extend DataAccess implements DataInterface,DataFilterInterface {public function __construct[]{
$this->db_connect[];
}// inherited interface class
public function insertData[$varDataRecord]{
}
// inherited interface class
public function deleteData[$varRecordId]{
}
// inherited interface class
public function getList[$varFilter]{
}
}

Bởi vì giao diện thực thi quy tắc triển khai của nó, nếu tôi cố gắng loại bỏ một trong các chức năng trong

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
0, ví dụ như
// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
1 và cố gắng khởi tạo nó, chúng tôi sẽ nhận được một lỗi nghiêm trọng

PHP Fatal error:  Class Customers contains 1 abstract method and must therefore be declared abstract or implement the remaining methods [Data_Interface::insertRecord]
Sự khác biệt giữa Tóm tắt và giao diện

Các lớp và giao diện trừu tượng của PHP tương tự như trong các ngôn ngữ oops khác
sự khác biệt chính trong quan điểm lập trình là

  1. Trong các lớp trừu tượng, điều này không nhất thiết là mọi phương thức phải trừu tượng. Nhưng trong giao diện, mọi phương thức đều trừu tượng
  2. Phương thức của giao diện php chỉ phải ở chế độ công khai, không thể có công cụ sửa đổi quyền truy cập theo mặc định, mọi thứ được coi là công khai. Phương thức trong lớp trừu tượng trong php có thể là công khai hoặc được bảo vệ cả hai
  3. Giao diện hỗ trợ đa kế thừa nhưng lớp trừu tượng không hỗ trợ đa kế thừa

Điều đó có nghĩa là bạn có thể mở rộng một

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
2 với một hoặc nhiều giao diện [do đó có nhiều kế thừa] như

________số 8

Có thể thấy, chúng ta đang mở rộng

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
3 với ba giao diện khác là
// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
4,
// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
4 và
// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
6

Bây giờ chúng ta hãy thử mở rộng một

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
7

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
4

Không có vấn đề gì, bạn CÓ THỂ mở rộng một lớp trừu tượng với chính xác một lớp nhưng nếu bạn cố gắng thêm một lớp nữa

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
5

Lần này PHP sẽ báo cho bạn một lỗi lạ mà không cho bạn biết bạn đang làm gì sai

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
8

Tôi ước PHP sẽ đưa ra thông báo giống như vậy [hy vọng PHP sẽ đưa ra thông báo lỗi thông minh hơn trong các phiên bản sau]

// interfaceinterface class DataInterface {
public function insertData[$varDataRecord];
public function deleteData[$varRecordId];
}interface class DataFilterInterface {
public function getList[$varFilter];
}
9

4. Một giao diện chỉ chứa thành viên không đầy đủ nhưng trừu tượng không đầy đủ [trừu tượng] và thành viên hoàn chỉnh cũng vậy

Sự khác biệt chính giữa các lớp trừu tượng và giao diện là gì?

Sự khác biệt giữa lớp trừu tượng và giao diện. Từ quan điểm lập trình hướng đối tượng, sự khác biệt chính giữa giao diện và lớp trừu tượng là giao diện không thể có trạng thái, trong khi lớp trừu tượng có thể có trạng thái với các biến đối tượng.

Khi nào sử dụng lớp trừu tượng và giao diện PHP?

Các lớp trừu tượng cho phép bạn cung cấp một số mức độ triển khai, giao diện là các mẫu thuần túy . Một giao diện chỉ có thể xác định chức năng, nó không bao giờ có thể thực hiện nó. Bất kỳ lớp nào triển khai giao diện cam kết thực hiện tất cả các phương thức mà nó định nghĩa hoặc nó phải được khai báo trừu tượng.

Sự khác biệt giữa giao diện và lớp trừu tượng đưa ra ví dụ cho từng cái là gì?

Câu trả lời ngắn. Một lớp trừu tượng cho phép bạn tạo chức năng mà các lớp con có thể thực hiện hoặc ghi đè. Giao diện chỉ cho phép bạn xác định chức năng, không triển khai chức năng đó . Và trong khi một lớp chỉ có thể mở rộng một lớp trừu tượng, nó có thể tận dụng nhiều giao diện.

Sự khác biệt giữa lớp trừu tượng và kế thừa trong PHP là gì?

Sự khác biệt chính giữa trừu tượng hóa và kế thừa là trừu tượng hóa cho phép ẩn các chi tiết bên trong và chỉ hiển thị chức năng cho người dùng, trong khi kế thừa cho phép sử dụng các thuộc tính và phương thức của một lớp đã tồn tại . Lập trình hướng đối tượng [OOP] là một mô hình lập trình chính. . Object-Oriented Programming [OOP] is a major programming paradigm.

Chủ Đề