A Programação orientada a objetos (POO) é um dilema entre os programadores e nos permite organizar o código em classes, objetos, atributos e métodos.
Uma classe é uma base que conceitua os aspectos e comportamentos normais de um conjunto de objetos.
Sendo que um objeto é uma instância de uma classe, que possui valores específicos para os atributos e pode executar os métodos definidos na classe.
Atributos são variáveis que armazenam dados relacionados ao objeto. Métodos são funções que realizam ações sobre o objeto ou com outros objetos.
Programação orientada a objetos, como criar uma classe
Em PHP, para criar uma classe, usamos a palavra-chave class seguida do nome da classe. Para criar um objeto, usamos a palavra-chave new seguida do nome da classe. Para acessar os atributos e métodos de um objeto, usamos o operador ->.
O conceito de herança em PHP
Herança é uma definição da programação orientada a objetos que nos oferece uma informação de que uma classe herda os atributos e métodos de outra classe, podendo modificar ou adicionar novas funcionalidades.
A classe que está herdando é denominada de classe filha ou subclasse, e a classe que está sendo herdada é denominada de classe pai ou de superclasse.
A vantagem da herança é que podemos reutilizar o código da classe pai na classe filha, evitando repetições e facilitando a manutenção.
Além disso, podemos especializar a classe filha de acordo com as suas características específicas, tornando o código mais organizado e coerente.
Em PHP, para indicar que uma classe herda de outra, usamos a palavra-chave extends seguida do nome da classe pai.
PDO e polimorfismo
Polimorfismo é uma definição da programação orientada a objetos que nos fornece o conceito de que um objeto assuma diferentes formas dependendo do contexto.
Isso significa que um objeto pode se comportar de forma diferente dependendo da classe a qual ele pertence ou do método que ele invoca.
Existem dois tipos principais de polimorfismo: o polimorfismo de sobrecarga e o polimorfismo de sobreposição.
O polimorfismo de sobrecarga ocorre quando uma classe possui dois ou mais métodos com o mesmo nome, mas com parâmetros diferentes.
Por exemplo, podemos criar uma classe chamada Calculadora que possui dois métodos chamados somar, um que recebe dois números inteiros e outro que recebe dois números reais.
Dependendo do tipo dos argumentos que passamos para o método somar, ele irá executar uma operação diferente.
O polimorfismo de sobreposição ocorre quando uma classe filha redefine um método da classe pai, alterando o seu comportamento.
Por exemplo, podemos criar uma classe chamada Animal que possui um método chamado emitirSom, e duas classes filhas chamadas Cachorro e Gato que herdam da classe Animal e sobrescrevem o método emitirSom.
Dependendo do tipo do objeto que chamamos o método emitirSom, ele irá produzir um som diferente.
Em PHP, para implementar o polimorfismo de sobrecarga, usamos a palavra-chave … (triple dots) para indicar que um método pode receber um número variável de argumentos.
Para implementar o polimorfismo de sobreposição, usamos a palavra-chave parent para acessar o método da classe pai. Por exemplo:
<?php
// Definindo uma classe chamada Calculadora
class Calculadora {
// Definindo um método chamado somar que recebe dois números inteiros
public function somar(int $a, int $b) {
return $a + $b;
}
// Definindo um método chamado somar que recebe dois números reais
public function somar(float $a, float $b) {
return $a + $b;
}
// Definindo um método chamado somar que recebe um número variável de argumentos
public function somar(…$args) {
$soma = 0;
foreach ($args as $arg) {
$soma += $arg;
}
return $soma;
}
// Criando um objeto da classe Calculadora
$calculadora = new Calculadora();
// Chamando o método somar com diferentes tipos e quantidades de argumentos
echo $calculadora->somar(2, 3); // imprime 5
echo $calculadora->somar(1.5, 2.5); // imprime 4
echo $calculadora->somar(1, 2, 3, 4); // imprime 10
// Definindo uma classe abstrata chamada Animal
abstract class Animal {
// Definindo um método abstrato chamado emitirSom
abstract public function emitirSom();
}
// Definindo uma classe chamada Cachorro que herda da classe Animal
class Cachorro extends Animal {
// Definindo um método chamado emitirSom que sobrescreve o método da classe pai
public function emitirSom() {
echo “Au au!\n”;
}
// Definindo uma classe chamada Gato que herda da classe Animal
class Gato extends Animal {
// Definindo um método chamado emitirSom que sobrescreve o método da classe pai
public function emitirSom() {
echo “Miau!\n”;
}
// Criando objetos das classes Cachorro e Gato
$cachorro = new Cachorro();
$gato = new Gato();
// Chamando o método emitirSom dos objetos
$cachorro->emitirSom(); // imprime Au au!
gato->emitirSom(); // imprime Miau!