¿Que es una clase abstracta?

Al igual que la clase abstracta, también hay métodos abstractos. Declaramos tanto el método abstracto como la clase abstracta con la palabra clave abstract. En este tema, vamos a aprender sobre la clase Abstract en PHP.

Según el concepto de herencia, la clase derivada amplía la clase padre. Los métodos en la clase padre son implementados o definidos por las clases derivadas. PHP hace un camino para que la clase padre sea más específica, al hacer uso de clases abstractas y métodos abstractos.

La clase abstracta contiene obligatoriamente un método como resumen. Además, esta clase abstracta también puede tener otros métodos no abstractos.

Sintaxis

Sintaxis de la clase abstracta con un método como resumen.

abstract class DemoAbstractClass() (
abstract public function DemoAbstractMethod();
)

Método abstracto

abstract public function DemoAbstractMethod();

¿Cómo funciona Abstract Class en PHP?

En este artículo, aprenderemos el funcionamiento de la clase abstracta y es así.

Ahora, como sabemos, una clase abstracta obligatoriamente tiene un método como abstracto.

Puede haber métodos no abstractos también. El método abstracto solo tiene la declaración en la clase base. Lo que significa que solo tiene nombres y parámetros sin otro código.

Para definir aún más el método y para trabajar con el método, este método debe implementarse en la clase derivada que extiende la clase base. Además, recuerde que esta clase abstracta no puede ser instanciada para crear objetos, pero la clase derivada de la clase base puede ser instanciada para crear objetos.

Ejemplos de clase abstracta en PHP

Estos son algunos ejemplos de la clase abstracta en PHP que se muestran a continuación.

Ejemplo 1

En el siguiente programa, aprendemos qué sucede cuando se crea un objeto de clase abstracta.

La clase abstracta Student se crea con un método abstracto favouriteSubject () de la clase Student y otros dos métodos no abstractos como setRollNo () y getRollNO () que establece y obtiene el rol del alumno, que se realiza creando el objeto de la clase derivada (extendiendo la clase base).

<_?php
abstract class Student (
protected $m;
public function setRollNo($rollno) (
return $this->m = $rollno;
)
public function getRollNo() (
return $this->m;
)
abstract public function favouriteSubject()
)
class Radha extends Student (
public function favouriteSubject() (
return "English";
)
)
$obj = new Student; //this statement throws error as we cannot create object of class Student as it is defined as abstract
$obj = new Radha; //this statement does not throws error and executes correctly
$obj->favouriteSubject();
?>

Salida:

Ejemplo # 2

Este ejemplo se explica paso a paso a continuación, después de la salida del programa junto con el código de este ejemplo.

Código

abstract class Student(
protected $m;
abstract public function calulatePercentage();
public function setMarks($marks) (
return $this->m = $marks;
)
public function favoriteSubject() (
return 'Favorite subject is English';
)
)
class Ram extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Ram is '.$percentage. '%' .'
';
)
)
class Sherry extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Sherry is '.$percentage. '%' .'
';
)
public function favoriteSubject() (
return 'Favorite subject is Maths';
)
)
$ram = new Ram();
$ram->setMarks(92);
echo $ram->calulatePercentage();
echo $ram->favoriteSubject();
echo ' ';
$sherry = new Sherry();
$sherry->setMarks(97);
echo $sherry->calulatePercentage();
echo $sherry->favoriteSubject();
abstract class Student(
protected $m;
abstract public function calulatePercentage();
public function setMarks($marks) (
return $this->m = $marks;
)
public function favoriteSubject() (
return 'Favorite subject is English';
)
)
class Ram extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Ram is '.$percentage. '%' .'
';
)
)
class Sherry extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Sherry is '.$percentage. '%' .'
';
)
public function favoriteSubject() (
return 'Favorite subject is Maths';
)
)
$ram = new Ram();
$ram->setMarks(92);
echo $ram->calulatePercentage();
echo $ram->favoriteSubject();
echo ' ';
$sherry = new Sherry();
$sherry->setMarks(97);
echo $sherry->calulatePercentage();
echo $sherry->favoriteSubject();

Salida:

Una clase abstracta puede denominarse esqueleto para clases derivadas. En este ejemplo anterior, declaramos la clase abstracta Estudiante y una propiedad llamada $ m para las marcas del estudiante.

Explicación del Ejemplo # 2

abstract class Student (
abstract public function calulatePercentage();
)

Una clase abstracta puede denominarse esqueleto para clases derivadas. En este ejemplo, declaramos la clase abstracta y los métodos junto con otros métodos.

En el ejemplo anterior, hemos declarado alumnos de clase abstracta con métodos abstractos para calcular el porcentaje del alumno, junto con las calificaciones otorgadas.

Además, hemos creado métodos (que no son abstractos) para establecer las Marcas del alumno y obtener la materia favorita del alumno.

abstract class Student(
abstract public function calulatePercentage();
public function setMarks($marks) (
return $this->m = $marks;
)
public function favoriteSubject() (
return 'Favorite subject is English';
)
)

Para crear objetos de clase abstracta Student, tenemos que extender la clase Student y crear clases derivadas a partir de ella. La clase base usa la palabra clave extend para permitir que la clase base se extienda. Una vez que la clase se extiende, ahora podemos usar los métodos de la clase base.

En el ejemplo anterior, Ram es la clase derivada que extiende la clase base Estudiante. Utiliza la palabra clave extend. Ahora hemos calculado el método porcentual () para calcular el porcentaje de las notas obtenidas por Ram.

class Ram extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Ram is '.$percentage. '%' .'
';
)
)

Declarando una clase más que extiende la clase base Estudiante para que aprendamos más.

En el ejemplo anterior, hemos creado Sherry como la clase derivada creada a partir de la clase base Estudiante. Esto usa la palabra clave extend. Tiene dos funciones, una que se declaró como abstracta, el método calulatePercentage () en la clase base, la otra es el método favoriteSubject () que no es abstracto.

class Sherry extends Student(
public function calulatePercentage()(
$percentage = ($this->m /100 ) * 100;
return 'The percentage of Sherry is '.$percentage. '%' .'
';
)
public function favoriteSubject() (
return 'Favorite subject is Maths';
)
)

Ahora creamos el objeto de la clase base y el objeto de la clase derivada, que arroja un error. Porque no podemos instanciar la clase declarada como abstracta.

Por lo tanto, solo se puede crear el objeto de la clase derivada. Una vez hecho esto, utilizando este objeto llamaremos al método abstracto y no al método abstracto como se ve a continuación.

$ram = new Ram();
$ram->setMarks(92);
echo $ram->calculatePercentage();
echo $ram->favoriteSubject();
echo ' ';
$sherry = new Sherry();
$sherry->setMarks(97);
echo $sherry->calculatePercentage();
echo $sherry->favoriteSubject();
$ram = new Ram();
$ram->setMarks(92);
echo $ram->calculatePercentage();
echo $ram->favoriteSubject();
echo ' ';
$sherry = new Sherry();
$sherry->setMarks(97);
echo $sherry->calculatePercentage();
echo $sherry->favoriteSubject();

Conclusión

En este artículo, espero que haya aprendido cómo se declara la clase abstracta, cómo funciona, cómo se extiende usando la palabra clave extendidas, cómo se declara el método abstracto en la clase base y cómo se implementa en la clase derivada. Los ejemplos explicados lo ayudarán a aprender el concepto a gusto. Espero que esté preparado para ser lo suficientemente útil como para comprender y practicar más.

Artículos recomendados

Esta es una guía de la clase Resumen en PHP. Aquí discutimos cómo funciona la clase abstracta en PHP con el código de muestra y los resultados apropiados. También puede echar un vistazo a los siguientes artículos para obtener más información:

  1. Objeto en PHP
  2. Constantes PHP
  3. Cookie en PHP
  4. Patrones en PHP
  5. Factorial en PHP
  6. PHP Magic Constants
  7. Clase abstracta en C ++
  8. Función recursiva de PHP
  9. Función recursiva en Python
  10. Función recursiva en C
  11. Función recursiva en JavaScript