Hướng dẫn how can i use abstract class in php? - làm thế nào tôi có thể sử dụng lớp trừu tượng trong php?


PHP - Các lớp và phương pháp trừu tượng là gì?

Các lớp và phương pháp trừu tượng là khi lớp cha có một phương thức được đặt tên, nhưng cần (các) lớp con của nó để điền vào các nhiệm vụ.

Một lớp trừu tượng là một lớp chứa ít nhất một phương pháp trừu tượng. Một phương pháp trừu tượng là một phương thức được khai báo, nhưng không được thực hiện trong mã.

Một lớp hoặc phương thức trừu tượng được xác định với từ khóa abstract:

Cú pháp

abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

Khi kế thừa từ một lớp trừu tượng, phương thức lớp con phải được xác định cùng tên và cùng một công cụ sửa đổi truy cập bị hạn chế. Vì vậy, nếu phương thức trừu tượng được định nghĩa là được bảo vệ, phương pháp lớp con phải được định nghĩa là được bảo vệ hoặc công khai, nhưng không riêng tư. Ngoài ra, loại và số lượng các đối số cần thiết phải giống nhau. Tuy nhiên, các lớp trẻ có thể có các đối số tùy chọn ngoài ra.

Vì vậy, khi một lớp trẻ được kế thừa từ một lớp trừu tượng, chúng ta có các quy tắc sau:

  • Phương pháp lớp con phải được xác định cùng tên và nó được phân chia lại phương thức trừu tượng của cha mẹ
  • Phương pháp lớp con phải được xác định với cùng hoặc một công cụ sửa đổi truy cập ít bị hạn chế
  • Số lượng các đối số cần thiết phải giống nhau. Tuy nhiên, lớp trẻ có thể có các đối số tùy chọn ngoài ra

Hãy xem xét một ví dụ:

Thí dụ

Tên = $ name; & nbsp; } & nbsp; Tóm tắt chức năng công cộng giới thiệu (): Chuỗi; }
// Parent class
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// lớp trẻ Audi mở rộng xe {& nbsp; hàm công khai intro (): chuỗi {& nbsp; & nbsp; & nbsp; Trả lại "Chọn chất lượng Đức! Tôi là một tên $ this->!"; & nbsp; }}
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}

lớp Volvo mở rộng xe {& nbsp; hàm công khai intro (): chuỗi {& nbsp; & nbsp; & nbsp; Trả lại "Tự hào là người Thụy Điển! Tôi là một tên $ this->!"; & nbsp; }}
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}

lớp citroen mở rộng xe {& nbsp; hàm công khai intro (): chuỗi {& nbsp; & nbsp; & nbsp; Trả lại "Sự ngông cuồng của Pháp! Tôi là một tên $ this->!"; & nbsp; }}
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}

// tạo các đối tượng từ các lớp con $ audi = new Audi ("audi"); echo $ audi-> intro (); echo "";
$audi = new audi("Audi");
echo $audi->intro();
echo "
";

$ volvo = new Volvo ("Volvo"); echo $ volvo-> intro (); echo "";
echo $volvo->intro();
echo "
";

$ citroen = new Citroen ("citroen"); echo $ citroen-> intro ();?>
echo $citroen->intro();
?>

Hãy tự mình thử »

Ví dụ giải thích

Các lớp Audi, Volvo và Citroen được kế thừa từ lớp xe hơi. Điều này có nghĩa là các lớp Audi, Volvo và Citroen có thể sử dụng thuộc tính tên $ công khai cũng như phương thức __construct () công khai từ lớp xe vì kế thừa.

Nhưng, intro () là một phương thức trừu tượng nên được xác định trong tất cả các lớp con và chúng nên trả về một chuỗi.



PHP - Ví dụ về lớp trừu tượng hơn

Hãy xem xét một ví dụ khác trong đó phương pháp trừu tượng có một đối số:

Thí dụ

Tên = $ name; & nbsp; } & nbsp; Tóm tắt chức năng công cộng giới thiệu (): Chuỗi; }
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

// lớp trẻ Audi mở rộng xe {& nbsp; hàm công khai intro (): chuỗi {& nbsp; & nbsp; & nbsp; Trả lại "Chọn chất lượng Đức! Tôi là một tên $ this->!"; & nbsp; }}
  public function prefixName($name) {
    if ($name == "John Doe") {
      $prefix = "Mr.";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs.";
    } else {
      $prefix = "";
    }
    return "{$prefix} {$name}";
  }
}

lớp Volvo mở rộng xe {& nbsp; hàm công khai intro (): chuỗi {& nbsp; & nbsp; & nbsp; Trả lại "Tự hào là người Thụy Điển! Tôi là một tên $ this->!"; & nbsp; }}
echo $class->prefixName("John Doe");
echo "
";
echo $class->prefixName("Jane Doe");
?>

Hãy tự mình thử »

Ví dụ giải thích

Thí dụ

Tên = $ name; & nbsp; } & nbsp; Tóm tắt chức năng công cộng giới thiệu (): Chuỗi; }
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

// lớp trẻ Audi mở rộng xe {& nbsp; hàm công khai intro (): chuỗi {& nbsp; & nbsp; & nbsp; Trả lại "Chọn chất lượng Đức! Tôi là một tên $ this->!"; & nbsp; }}
  // The child class may define optional arguments that are not in the parent's abstract method
  public function prefixName($name, $separator = ".", $greet = "Dear") {
    if ($name == "John Doe") {
      $prefix = "Mr";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$greet} {$prefix}{$separator} {$name}";
  }
}

lớp Volvo mở rộng xe {& nbsp; hàm công khai intro (): chuỗi {& nbsp; & nbsp; & nbsp; Trả lại "Tự hào là người Thụy Điển! Tôi là một tên $ this->!"; & nbsp; }}
echo $class->prefixName("John Doe");
echo "
";
echo $class->prefixName("Jane Doe");
?>

Hãy tự mình thử »



PHP có hỗ trợ lớp trừu tượng không?

PHP có các lớp và phương pháp trừu tượng. Các lớp được xác định là trừu tượng không thể được khởi tạo và bất kỳ lớp nào chứa ít nhất một phương pháp trừu tượng cũng phải là trừu tượng. Các phương thức được định nghĩa là trừu tượng chỉ đơn giản là khai báo chữ ký của phương thức; Họ không thể xác định việc thực hiện.. Classes defined as abstract cannot be instantiated, and any class that contains at least one abstract method must also be abstract. Methods defined as abstract simply declare the method's signature; they cannot define the implementation.

Việc sử dụng lớp trừu tượng là gì?

Một lớp trừu tượng được sử dụng nếu bạn muốn cung cấp một chức năng phổ biến, được triển khai trong số tất cả các triển khai của thành phần.Các lớp trừu tượng sẽ cho phép bạn thực hiện một phần lớp của mình, trong khi các giao diện sẽ không có việc triển khai cho bất kỳ thành viên nào.if you want to provide a common, implemented functionality among all the implementations of the component. Abstract classes will allow you to partially implement your class, whereas interfaces would have no implementation for any members whatsoever.

Tôi có thể khởi tạo lớp trừu tượng PHP không?

Một lớp trừu tượng không thể được khởi tạo..

Tại sao chúng ta sử dụng lớp trừu tượng và giao diện trong PHP?

Các lớp trừu tượng cho phép bạn cung cấp một số mức độ thực hiện, 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 thực hiện giao diện đều cam kết thực hiện tất cả các phương thức mà nó xác định hoặc nó phải được khai báo trừu tượng.. An interface can only define functionality, it can never implement it. Any class that implements the interface commits to implementing all the methods it defines or it must be declared abstract.