¿Cuáles son la ventaja si uso la clase abstracta en php? No puedo encontrar nada bueno en eso. Creo que puedo trabajar fácilmente sin usar la clase abstracta.
Podría, naturalmente. Sin embargo, si hay muchos objetos que son del mismo tipo, podría ayudar a extraer la funcionalidad común en una clase "base", lo que significa que no tiene que duplicar esa lógica.
En realidad, hay dos razones. La primera razón, para mí, sería que todos los descendientes de su clase abstracta tienen el mismo tipo , y ambos se adhieren a la misma interfaz exacta. Eso significa que un documento PDF, por ejemplo, tendrá la misma interfaz que un documento docx, y el código del cliente no tiene que importar qué objeto está manejando. Ejemplo corto (en 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();
}
}
Primero de todos; Tenga en cuenta el hecho de que la clase DocumentHandler no tiene conocimiento de qué tipo de documento está realmente manejando. Ni siquiera le importa. Es ignorante Sin embargo, es sabe saber qué métodos se pueden invocar, porque la interfaz entre los dos tipos de documentos es la misma. Esto se llama polimorfismo , y podría lograrse fácilmente con la implementación de una interfaz de documento.
La segunda parte es; si todos y cada uno de los documentos tiene un autor, y ese autor siempre se solicita, puede copiar el método en el documento PdfDocument y DocxDocument, pero se estaría duplicando. Por ejemplo, si decides que quieres que el autor esté escrito con mayúsculas, y cambiarías el retorno $ this-> author a ucwords ($ this-> author), tendrías que hacerlo tantas veces como tú. he copiado ese método. Usando una clase abstracta, puede definir el comportamiento, mientras marca la clase como incompleta. Esto es muy útil.
Espero que ayude.
más: http://stackoverflow.com/search?q=abstract+class+interface+php – Gordon
Ya lo entiendo ... me gustaría cerrar la pregunta – Sreeraj
Bah, después de pasar diez minutos escribiendo una respuesta? :( –