Métodos abstractos en POO en PHP
Las clases abstractas también pueden contener métodos abstractos. Dichos métodos no deben tener implementación, sino que son necesarios para indicar que tales métodos deben estar en las clases hijas. Y propiamente la implementación de tales métodos es tarea de las clases hijas.
Para declarar un método como abstracto,
en su declaración se debe escribir la palabra clave
abstract.
Probemos en la práctica. Supongamos que se espera
que todas las clases hijas de la clase User deben
tener el método increaseRevenue.
Este método debe tomar los ingresos actuales del usuario y aumentarlos en cierta cantidad, pasada como parámetro.
La propia clase User no sabe exactamente qué
ingresos tendrá la clase hija - después de todo, para un empleado
es un salario, y para un estudiante - una beca. Por lo tanto,
cada clase hija implementará este método
a su manera.
La esencia aquí es que el método abstracto de la clase
User obliga al programador a implementar
este método en las clases hijas, de lo contrario PHP mostrará un error.
De esta manera, usted, u otro programador,
que trabaje con su código, no podrá de ninguna manera
olvidarse de implementar el método necesario
en la clase hija.
Entonces, probemos en la práctica. Añadamos
el método abstracto increaseRevenue
a la clase User:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Método abstracto sin cuerpo:
abstract public function increaseRevenue($value);
}
?>
Dejemos que nuestra clase Employee permanezca por ahora
sin cambios. En este caso, incluso si no se
crea un objeto de la clase Employee,
sino simplemente se ejecuta el código donde se definen
nuestras clases, - PHP mostrará un error.
Escribamos ahora la implementación del método
increaseRevenue en la clase
Employee:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Escribamos la implementación del método:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Comprobemos el funcionamiento de nuestra clase:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Implementemos el método increaseRevenue también
en la clase Student. Solo que ahora nuestro
método aumentará la beca:
<?php
class Student extends User
{
private $scholarship; // beca
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// El método aumenta la beca:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Añade a tu clase User el mismo
método abstracto increaseRevenue.
Escribe la implementación de este método en las clases
Employee y Student.
En la clase Figure crea métodos abstractos
para obtener el área y el perímetro de la figura.