O que é polimorfismo e como é utilizado na programação PHP?
sobes.tech IA
Resposta da IA
O polimorfismo é a capacidade de usar uma mesma interface para diferentes tipos de dados. Em PHP, manifesta-se de várias formas:
-
Herança (Polimorfismo por Subtipo): As classes filhas podem redefinir os métodos da classe pai, fornecendo a sua própria implementação. Quando um método é chamado num objeto de tipo base, na realidade será executado o método da classe filha específica, dependendo do tipo do objeto.
<?php class Animal { public function makeSound() { echo "Som genérico de animal\n"; } } class Dog extends Animal { public function makeSound() { echo "Au!\n"; } } class Cat extends Animal { public function makeSound() { echo "Miau!\n"; } } function makeAnimalSound(Animal $animal) { $animal->makeSound(); // Chamada ao método do subtipo correspondente } $dog = new Dog(); $cat = new Cat(); makeAnimalSound($dog); // Saída: Au! makeAnimalSound($cat); // Saída: Miau! -
Interfaces (Polimorfismo por Interface): Diferentes classes podem implementar a mesma interface, prometendo fornecer um conjunto definido de métodos com a mesma assinatura. Isto permite trabalhar com objetos de diferentes classes através de uma interface comum.
<?php interface Shape { public function getArea(); } class Circle implements Shape { private $radius; public function __construct($radius) { $this->radius = $radius; } public function getArea() { return pi() * $this->radius * $this->radius; } } class Square implements Shape { private $side; public function __construct($side) { $this->side = $side; } public function getArea() { return $this->side * $this->side; } } function calculateTotalArea(array $shapes) { $totalArea = 0; foreach ($shapes as $shape) { if ($shape instanceof Shape) { // Verificação da interface $totalArea += $shape->getArea(); } } return $totalArea; } $shapes = [new Circle(5), new Square(4)]; echo calculateTotalArea($shapes); // Mostra a soma das áreas do círculo e do quadrado -
Classes Abstratas (Polimorfismo por Classe Abstrata): Semelhante ao polimorfismo baseado em interfaces, mas permite definir uma implementação base para alguns métodos.
O polimorfismo aumenta a flexibilidade, extensibilidade e manutenção do código, permitindo escrever algoritmos genéricos que trabalham com coleções de objetos de diferentes tipos através de uma interface comum.