¿Qué son las clases abstractas?
Una clase abstracta en PHP es una clase que contiene al menos un método abstracto. Un método abstracto es un método que se declara pero no se implementa dentro de la clase padre.
Las clases abstractas se utilizan cuando queremos definir una estructura base que debe ser implementada por las clases hijas.
Se definen utilizando la palabra clave abstract
.
Sintaxis:
<?php
abstract class ParentClass {
abstract public function someMethod1();
abstract public function someMethod2($name, $color);
abstract public function someMethod3() : string;
}
?>
Ejemplo de clase abstracta
Cuando una clase hija hereda de una clase abstracta, debe definir los métodos abstractos con el mismo nombre y con la misma visibilidad (o menos restrictiva).
Ejemplo:
<?php
// Clase padre abstracta
abstract class Car {
public $name;
public function __construct($name) {
$this->name = $name;
}
abstract public function intro() : string;
}
// Clases hijas
class Audi extends Car {
public function intro() : string {
return "Choose German quality! I'm an $this->name!";
}
}
class Volvo extends Car {
public function intro() : string {
return "Proud to be Swedish! I'm a $this->name!";
}
}
class Citroen extends Car {
public function intro() : string {
return "French extravagance! I'm a $this->name!";
}
}
// Creación de objetos
$audi = new Audi("Audi");
echo $audi->intro();
echo "
";
$volvo = new Volvo("Volvo");
echo $volvo->intro();
echo "
";
$citroen = new Citroen("Citroen");
echo $citroen->intro();
?>
Método abstracto con argumentos
Un método abstracto puede recibir argumentos, y la clase hija debe respetar la cantidad y tipo de argumentos definidos en la clase abstracta.
Ejemplo:
<?php
abstract class ParentClass {
abstract protected function prefixName($name);
}
class ChildClass extends ParentClass {
public function prefixName($name) {
if ($name == "John Doe") {
$prefix = "Mr.";
} elseif ($name == "Jane Doe") {
$prefix = "Mrs.";
} else {
$prefix = "";
}
return "{$prefix} {$name}";
}
}
$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "
";
echo $class->prefixName("Jane Doe");
?>
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias