Computer >> Máy Tính >  >> Lập trình >> PHP

Giải thích lớp trừu tượng trong PHP.

PHP5 đi kèm với mô hình hướng đối tượng, một số khái niệm của mô hình hướng đối tượng là:lớp, đối tượng, đóng gói, đa hình, các lớp trừu tượng và lớp cuối cùng, và các phương thức, giao diện và kế thừa, v.v. Trong bài viết này,

chúng ta sẽ thảo luận về Lớp trừu tượng và các tính năng của nó liên quan đến các kỹ thuật hướng đối tượng trong PHP. Ngoài ra, chúng ta sẽ tìm hiểu cách triển khai Lớp trừu tượng cùng với một số ví dụ.

Tuy nhiên, trước khi đi quá sâu, hãy tìm hiểu cách định nghĩa lớp trừu tượng.

Chúng ta có thể khai báo một lớp là trừu tượng bằng cách gắn tên của lớp với từ khóa trừu tượng. Định nghĩa rất rõ ràng, lớp có chứa các phương thức trừu tượng được gọi là lớp trừu tượng. Các phương thức trừu tượng được định nghĩa trong lớp trừu tượng chỉ có tên và đối số, không có mã nào khác.

Không thể tạo đối tượng của một lớp trừu tượng. Thay vào đó, chúng ta cần mở rộng các lớp con tính toán định nghĩa của hàm vào phần thân của các phương thức trừu tượng trong các lớp con và sử dụng các lớp con này để tạo các đối tượng.

Hãy thảo luận một số thông tin quan trọng về các lớp trừu tượng trong PHP:

1.Một lớp trừu tượng có thể có trừu tượng cùng với các phương thức không trừu tượng.

Ví dụ:

<?php
   abstract class base {
      abstract function printdata();
      public function getdata() {
         echo "Tutorials Point";
      }
   }
   class child extends base{
      public function printdata(){
         echo "Good morning";
      }
   }
   $obj = new child();
   $obj->getdata();
?>

Đầu ra:

Tutorials Point

2.Không thể khởi tạo trực tiếp.

Ví dụ:

<?php
   abstract class AbstractClass{
      abstract protected function calculate();
      public function adddata() {
         echo "Addition done";
      }
   }
   $obj=new AbstractClass();
   $obj->adddata();
?>

Đầu ra:

Fatal error: Uncaught Error: Cannot instantiate abstract class AbstractClass

3. Khả năng hiển thị giống nhau (hoặc ít bị hạn chế hơn):

Tất cả các lớp con phải định nghĩa tất cả các phương thức được đánh dấu là trừu tượng trong lớp cha, với tất cả các phương thức này cần được định nghĩa bằng cùng một chữ ký hoặc chữ ký ít bị hạn chế hơn. Giả sử Trong lớp cha nếu chúng ta định nghĩa một phương thức trừu tượng với tính trực quan được bảo vệ, thì trong quá trình thực thi lớp con, nó phải được định nghĩa bằng phương thức công khai được bảo vệ, nhưng không phải phương thức riêng tư.

Ví dụ:

<?php
   abstract class AbstractBaseClass1{
      abstract public function addValue();
      abstract protected function getValue();
   }
   class ConcreteClass extends AbstractBaseClass1{
      protected function addValue() {
         return "ConcreteClass";
      }
      public function getValue() {
         return " Child Class";
      }
   }
   $classobj = new ConcreteClass;
   $classobj->addValue();
?>

Đầu ra:

Fatal errorAccess level to ConcreteClass::addValue() must be public (as in class AbstractBaseClass1)

4. Một phương thức trừu tượng không được chứa nội dung:

Các phương thức được khai báo là trừu tượng chỉ đơn giản khai báo chữ ký của phương thức - chúng không thể định nghĩa bất kỳ ai bên trong chúng. Mặc dù phần thân có thể hiện diện bên trong một phương thức không trừu tượng.

Ví dụ:

<?php
   abstract class ParentClass{
      abstract protected function printValue(){
         return "Good morning";
      }
   }
   class ClassA extends ParentClass{
      protected function printValue() {
         return "ConcreteClass1";
      }
   }
   $classobj = new ClassA;
   $classobj->printValue();
?>

Đầu ra:

PHP Fatal error: Abstract function ParentClass::printValue() cannot contain body

5.Bất kỳ lớp nào có chứa ít nhất một phương thức trừu tượng phải được khai báo là lớp trừu tượng:

Một lớp trừu tượng có thể có các phương thức trừu tượng và không trừu tượng, nhưng nó phải chứa ít nhất một phương thức trừu tượng. Nếu nó chứa một phương thức trừu tượng thì nó phải được khai báo là trừu tượng.

Ví dụ:

<?php
   class AbstractClass {
      abstract protected function getValue();
      public function printData() {
         echo " Welcome to Tutorials Point";
      }
   }
   $obj=new AbstractClass();
   $obj->printData();
?>

Đầu ra:

PHP Fatal error: Class AbstractClass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AbstractClass::getValue)

Lớp 6.Abstract không hỗ trợ đa kế thừa:

Nó không hỗ trợ đa kế thừa.

Bản đồ:

<?php
   Abstract class SuperClass{
      public abstract function test();
      protected function welcome(){
         echo "Good morning";
      }
   }
   class ClassA extends SuperClass{
      public function test(){
         echo "Hello";
      }
      protected function welcome(){
         echo "Good afternoon";
      }
   }
   class ClassB extends SuperClass{
      public function test(){
         echo "Hello";
      }
      protected function welcome(){
         echo "Good evening";
      }
   }
   class ClassC extends ClassA, ClassB{
      public function test1(){
         $c = new self();
         $c->welcome();
      }
   }
?>

Đầu ra:

Error

Giải thích:

Ở đây chúng ta đã khai báo SuperClass là một lớp trừu tượng có phương thức test () và welcome () và, ClassA và ClassB và các lớp cụ thể mở rộng từ một lớp trừu tượng. Sau đó, chúng tôi đã cố gắng tạo ClassC mở rộng từ ClassA và ClassB. Như đã thấy rõ trong đoạn mã, khi gọi phương thức welcome () bằng đối tượng ClassC, trình biên dịch không thể chọn liệu nó phải gọi phương thức ClassA’s welcome () hay ClassB’s welcome (). Vì vậy, để tránh những phức tạp như vậy, PHP không hỗ trợ đa kế thừa.

Lưu ý:

Một lớp trừu tượng có thể mở rộng một lớp trừu tượng khác, lớp Trừu tượng có thể cung cấp việc triển khai giao diện.