Lợi thế nếu tôi sử dụng lớp trừu tượng trong php là gì? tôi không thể tìm thấy bất cứ điều gì tốt về điều đó. Tôi nghĩ rằng tôi có thể dễ dàng làm tất cả các công việc với ra bằng cách sử dụng lớp trừu tượng?
Bạn có thể, một cách tự nhiên. Tuy nhiên, nếu có nhiều đối tượng có cùng loại khá nhiều, nó có thể giúp trích xuất các chức năng chung thành một lớp "cơ sở", có nghĩa là bạn không phải sao chép logic đó.
Thực tế, có hai lý do. Lý do đầu tiên, đối với tôi, sẽ là tất cả các hậu duệ của lớp trừu tượng của bạn có cùng một loại và cả hai đều tuân thủ cùng một giao diện chính xác. Điều đó có nghĩa là một tài liệu PDF ví dụ sẽ có giao diện giống như một tài liệu docx, và mã máy khách không phải quan tâm đối tượng đó đang xử lý. Ví dụ ngắn (bằng PHP).
<?php
abstract class Document {
protected $author;
public function __construct($author) {
$this->author = $author;
}
abstract public function render();
public function author() {
return $this->author;
}
}
class PdfDocument extends Document {
public function render() {
// do something PDF specific here.
}
}
class DocxDocument extends Document {
public function render() {
// do something DOCX specific here.
}
}
class DocumentHandler {
public function handle(Document $document) {
$this->log('Author has been read ' . $document->author());
return $document->render();
}
}
Trước hết; hãy nhớ rằng lớp DocumentHandler không có kiến thức về loại tài liệu mà nó thực sự xử lý. Nó thậm chí không quan tâm. Nó dốt nát. Tuy nhiên, nó không biết phương thức nào có thể được gọi, bởi vì giao diện giữa hai loại tài liệu giống nhau. Điều này được gọi là đa hình và có thể dễ dàng đạt được với việc triển khai giao diện Tài liệu.
Phần thứ hai là; nếu mỗi và mọi tài liệu đều có tác giả và tác giả đó luôn được yêu cầu, bạn có thể sao chép phương thức sang PdfDocument cũng như DocxDocument, nhưng bạn sẽ tự sao chép chính mình. Ví dụ, nếu bạn quyết định rằng bạn muốn tác giả viết bằng vốn, và bạn thay đổi trả $ this-> author thành ucwords ($ this-> author), bạn phải thực hiện nó nhiều lần như bạn ' đã sao chép phương thức đó. Sử dụng một lớp trừu tượng, bạn có thể xác định hành vi, trong khi đánh dấu chính lớp đó là không đầy đủ. Điều này đến rất tiện dụng.
Hy vọng điều đó sẽ hữu ích.
Nguồn
2011-06-16 14:21:46
nhiều hơn: http://stackoverflow.com/search?q=abstract+class+interface+php – Gordon
Ya tôi hiểu .. muốn đóng câu hỏi – Sreeraj
Bah, sau khi tôi dành mười phút để viết câu trả lời? :( –