Polimorfismo PHP

Resumo : neste tutorial, você aprenderá sobre o conceito de polimorfismo na programação orientada a objetos. E você também aprenderá como implementar polimorfismo em PHP usando classes ou interfaces abstratas.

O que é polimorfismo?

Polimorfismo é uma palavra grega que significa literalmente muitas formas. Na programação orientada a objetos, o polimorfismo está intimamente relacionado à herança .

O polimorfismo permite que objetos de classes diferentes respondam de maneira diferente com base na mesma mensagem.

Para implementar polimorfismo em PHP, você pode usar classes abstratas ou interfaces .

O polimorfismo ajuda a criar uma estrutura genérica que aceita diferentes tipos de objetos que compartilham a mesma interface.

Posteriormente, ao adicionar um novo tipo de objeto ao sistema, não será necessário alterar a estrutura para acomodar o novo tipo de objeto, desde que ela implemente a mesma interface.

Ao usar o polimorfismo, você pode reduzir o acoplamento e aumentar a capacidade de reutilização do código.

Polimorfismo PHP usando uma classe abstrata

Primeiro, defina uma classe abstrata chamada Personque possua um método abstrato chamado greet().

<?php

abstract class Person
{
	abstract public function greet();
}Linguagem de código:  HTML, XML  ( xml )

Segundo, defina as Englishclasses German, e Frenchque estendem a Personclasse. O greet()método de cada classe retorna uma mensagem de saudação diferente.

<?php
// ...
class English extends Person
{
	public function greet()
	{
		return 'Hello!';
	}
}

class German extends Person
{
	public function greet()
	{
		return 'Hallo!';
	}
}

class French extends Person
{
	public function greet()
	{
		return 'Bonjour!';
	}
}Linguagem de código:  HTML, XML  ( xml )

Terceiro, defina uma função chamada greeting()que aceite um array de Personobjetos e chame o greet()método de cada objeto:

<?php
//...
function greeting($people)
{
	foreach ($people as $person) {
		echo $person->greet() . '<br>';
	}
}Linguagem de código:  HTML, XML  ( xml )

Quarto, defina um array de objetos das classes English, Germane Frenche passe-o para a greeting()função:

<?php
//...
$people = [
	new English(),
	new German(),
	new French()
];

greeting($people);Linguagem de código:  HTML, XML  ( xml )

Saída:

Hello!
Hallo!
Bonjour!

Devido à implementação específica do greet()método em cada classe, esses objetos retornam diferentes mensagens de saudação.

O diagrama de classes a seguir ilustra os relacionamentos entre as classes:

Classe abstrata de polimorfismo PHP

Posteriormente, se você quiser criar uma nova classe que estenda a Personclasse, não será necessário alterar a greeting()função.

Por exemplo, você pode definir uma nova classe chamada Americanque estende a Personclasse:

<?php
// ...
class American extends Person
{
	public function greet()
	{
		return 'Hi!';
	}
}Linguagem de código:  HTML, XML  ( xml )

E use o objeto da Americanclasse na greeting()função da seguinte forma:


<?php
// ...
$people = [
	new English(),
	new German(),
	new French(),
	new American()
];

greeting($people);Linguagem de código:  HTML, XML  ( xml )

Saída:

Hello!
Hallo!
Bonjour!
Hi!

Polimorfismo PHP usando uma interface

O exemplo a seguir é igual ao anterior, exceto que usa uma interface em vez de uma classe abstrata.

Primeiro, defina uma interface chamada Greetingque possua o greet()método. O greet()método retorna uma mensagem de saudação:

<?php

interface Greeting
{
	public function greet();
}Linguagem de código:  HTML, XML  ( xml )

Segundo, defina as classes English, Germane Frenchque implementam a Greetinginterface:


<?php
// ...
class English implements Greeting
{
	public function greet()
	{
		return 'Hello!';
	}
}

class German implements Greeting
{
	public function greet()
	{
		return 'Hallo!';
	}
}

class French implements Greeting
{
	public function greet()
	{
		return 'Bonjour!';
	}
}Linguagem de código:  HTML, XML  ( xml )

Terceiro, defina a greeting()função que aceita um array de objetos que implementa a Greetinginterface:

<?php
// ...
function greeting($greeters)
{
	foreach ($greeters as $greeter) {
		echo $greeter->greet() . '<br>';
	}
}Linguagem de código:  HTML, XML  ( xml )

Finalmente, defina um array de Greetingobjetos e passe-o para a greeting()função:


<?php
// ...
$greeters = [
	new English(),
	new German(),
	new French(),
];

greeting($greeters);Linguagem de código:  HTML, XML  ( xml )

Saída:

Hello!
Hallo!
Bonjour!

O diagrama de classes a seguir mostra os relacionamentos entre a interface e as classes:

Resumo

  • O polimorfismo permite que objetos de classes diferentes respondam de maneira diferente à mesma mensagem.
  • Use interfaces ou classes abstratas para implementar polimorfismo em PHP.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *