Código de uma classe em PHP Herança em PHP Código de uma interface em PHP Implementando uma interface em PHP Herança e interface em PHP
#PraCegoVer - Transcrição dos Slides Na declaração de uma classe em PHP, o nome é declarado em: < ?php
public class Produto {
Os atributos são: private $codigo;
private $nome;
private $preco;
Os Getters e Setters são:
public getCodigo(){ return $this-> codigo; }
public setNome($nome) { $this-> nome= $nome; }

A herança em PHP é declarada da seguinte forma, onde as demais propriedades e métodos são da classe filha (Assinatura) e não da classe pai (Produto): <? php
class Assinatura extends Produto{ ...}

Declaramos uma interface da seguinte forma: <? php
interface Expiravel
{public function getTempoRestante();}, onde os métodos são somente assinatura

Implementamos uma interface da seguinte forma: <? php
class Assinatura implements Expiravel
{public function getTempoRestante()
{return $this->dataExpiracao->diff(new DateTime());}}

A seguir vemos um exemplo de herança e interface em PHP: <? php
class Assinatura extends Produto implements Expiravel
{public function getTempoRestante()
}return $this ->dataExpiracao->diff(new DateTime());}}, onde Assinatura é a classe, Produto é a classe pai e Expiravel é a interface

Herança e interface em PHP

A definição de classes na linguagem PHP é feita com uma sintaxe simples, de fácil compreensão e nos permite criar atributos, propriedades e métodos. Por exemplo, na Figura 1 temos a representação de uma classe chamada Produto com seus campos e logo em seguida vemos como essa classe seria implementada em PHP:

Figura 1. Diagrama da classe Produto
Figura 1. Diagrama da classe Produto

      <?php
       
      class Produto {
       
         private $codigo;
         private $nome;
         private $preco;
       
         public function getCodigo()
         {
             return $this->codigo;
         }
         public function setCodigo($codigo)
         {
             $this->codigo = $codigo;
         }
         public function getNome()
         {
             return $this->nome;
         }
         public function setNome($nome)
         {
             $this->nome = $nome;
         }
         public function getPreco()
         {
             return $this->preco;
         }
         public function setPreco($preco)
         {
             $this->preco = $preco;
         }
      }

Linha 3: Nessa linha temos os seguintes termos: class define que estamos criando uma classe; e Produto, que é o nome da classe.

Linhas 5 a 7: Aqui temos o que chamamos de atributos. São variáveis privadas que representam as características da classe. Note o modificador de acesso private e o nome de cada atributo;

Linhas 9 a 33: Já aqui temos as propriedades da classe (também chamadas de getters e setters), que são públicas e encapsulam os atributos. Observe que criamos um método para modificar os valores e outro para retornar. O get retorna o atributo correspondente e o set recebe um valor e o repassa para o atributo.

Herança

Herança é um tipo de relacionamento muito comum na orientação a objetos e ocorre quando uma classe descende da outra e herda suas características e comportamentos, além de implementar os seus próprios. Por exemplo, considere o diagrama de classes da Figura 2 em que Assinatura herda de Produto.

Diagrama classes com Assinatura herdando de Produto
Figura 2. Diagrama classes com Assinatura herdando de Produto

Nesse cenário a classe Assinatura herda de Produto e também define uma propriedade e método próprios. Em PHP essa classe seria implementada da seguinte forma:

<?php
       
      class Assinatura extends Produto {
       
         private $dataExpiracao;
       
         public function getDataExpiracao()
         {
             return $this->dataExpiracao;
         }
         public function setDataExpiracao($dataExpiracao)
         {
             $this->dataExpiracao = new DateTime($dataExpiracao);
         }
         public function getTempoRestante()
         {
             return $this->dataExpiracao->diff(new DateTime());
         }
      }

Linha 3: A herança em PHP é representada pela palavra reservada extends, seguida do nome da classe que está sendo herdada. Nesse caso, Assinatura herda de Produto;

Linhas 5 a 18: Nesse trecho temos o atributo e propriedade que dizem respeito apenas à assinatura;

Linhas 15 a 18: Aqui temos o método getTempoRestante da assinatura, que retorna um DateInterval representando o tempo que falta até a assinatura expirar;

Interfaces

Na Orientação a Objetos as interfaces funcionam como contratos, ou seja, elas definem comportamentos que devem ser cumpridos pelas classes. Quando uma classe atende a uma interface, dizemos que ela implementa essa interface. Na Figura 3 temos um diagrama que mostra uma nova configuração para as classes que representamos anteriormente:

Diagrama de classes com interface
Figura 3. Diagrama de classes com interface

Nesse cenário a interface Expiravel define que toda classe que representa um produto cuja data de expiração ou validade chega ao fim (expira) deve implementar o método getTempoRestante. Por exemplo, se tivéssemos outra classe Voucher ou Desconto, por exemplo, ela poderia implementar essa classe e definir o comportamento desse método.

Em PHP a interface Expiravel seria escrita da seguinte forma:


      <?php
       
      interface Expiravel
      {
         public function getTempoRestante();
      }

Linha 3: Note o uso da palavra reservada interface e também no nome da interface: Expiravel.

Linha 5: As interfaces definem apenas a assinatura do método, não seu comportamento. A implementação do método fica por conta da classe que implementa essa interface.

Agora, considerando que a classe Assinatura implementa essa interface, seu código seria modificado da seguinte forma:

<?php
       
      class Assinatura extends Produto implements Expiravel {
       
         private $dataExpiracao;
       
         public function getDataExpiracao()
         {
             return $this->dataExpiracao;
         }
         public function setDataExpiracao($dataExpiracao)
         {
             $this->dataExpiracao = new DateTime($dataExpiracao);
         }
         public function getTempoRestante()
         {
             return $this->dataExpiracao->diff(new DateTime());
         }
      }

Linha 3: A sintaxe para implementar uma interface em PHP é a palavra reservada implements e em seguida o nome da Interface;

Linhas 5 a 18: Como a classe implementa a interface Expiravel, ela deve obrigatoriamente definir o comportamento do método getTempoRestante.

A partir desses conceitos podemos criar diversas outras classes e interfaces, com seus atributos, propriedades e métodos específicos.