Superclasses, Interfaces e Orientação a Objetos no PHP

Basicamente o nosso exemplo será uma pequena aplicação para persistir objetos, no caso as operações basicas (CRUD). Começamos pela nossa superclasse comum para o modelo de negócio do nosso sistema:

A classe Bean contém as características básicas para um objeto do sistema.

A seguir temos a classe Usuario, ou melhor chamarmos do nosso Objeto Usuario. O mesmo estende as características da superclasse Bean, assim garante um comportamento padrão para todos os objetos do sistema.

Basicamente todas os outros objetos do sistema seguiriam este padrão de utilização, as necessidades podem mudar de acordo com o projeto que você esteja desenvolvendo.

Agora vamos imaginar uma peça que iremos fazer para persistir os nossos objetos de maneira generica por exemplo, para isso temos que pensar em algumas coisas, como:

  • Ele irá ser 100% funcional para todos os casos;
  • Que tipos de regras terei que seguir para utiliza-lo;
  • Tipos de resposta;
  • Performance;
  • Escalabilidade;
  • Viabilidade se comparado ao uso de algum framework;
  • Etc;

Sempre surgem muitas perguntas quanto a isso, mas vamos pensar no seguinte, se você precisa desenvolver um componente que será utilizado frequentemente no seu sistema, tenha sempre em mente que as regras de negócio podem ser alteradas por algum motivo X, Y ou Z, tente sempre se previnir de alguma maneira, tanto na análise do seu projeto quanto no código que você ou a sua equipe já tenham martelado.

Vamos montar um componente para servir de modelo para os seus objetos de persistencia do nosso exemplo.

Eu sempre sigo um meio que me previne de alterações inesperadas, como assim? Quando desenvolvo a camada de negócio, sempre faço uma classe que contenha uma implementação genérica que sirva aos elementos básicos da aplicação tais como categorias, tipos, marcadores, etc.
Vamos construir a nossa Interface para padronizar os métodos comuns do nosso modelo de negócio.

A Interface IObjectManager define todos os métodos comuns para os objetos gerenciadores da regra de negócio, em miúdos, as lógicas de inserções, exclusões, etc. Nesta interface já podemos notar a tipagem dos parâmetros na assinatura dos métodos comuns a todas as classes que implementarem esta interface.

Agora vamos a nossa classe que contém uma implementação genérica para a nossa camada de persistência, mas antes ainda vamos ver a nossa classe para criar as conexões com a base de dados MySQL.

Vamos ficar atentos ao seguinte item interessante e muito bacana que o PHP nos disponibiliza, o método mágico “__destruct()”, ou seja, este sempre será executado quando uma classe destruída da memória ou do seu ciclo de execução na aplicação. Neste nosso tutorial eu preferi apenas destruir a conexão com a base de dados.

Agora vamos a nossa implementação genérica, que é claro não vou deixar totalmente feita, mas apenas vai servir de exemplo para quem estiver querendo entender como que funciona a Orientação a Objetos no PHP.

Na classe acima temos uma “implementação” genérica para atender a maioria dos casos, mas é claro que será necessário escrevermos classes especializadas para atender casos especificos, como o login de usuários no sistema.
No código abaixo temos uma classe que estende da interface e apenas implementa um novo método, o login_usuario.

Este não seria um modo ideal de se fazer, porque temos diversos “métodos perdidos e não implementados” por nada, poderiamos fazer uma extensão da classe ObjectManager que já está toda implementada e caso necessitarmos de algum método básico, o mesmo já estará implementado.

No código da classe UsuarioManagerImpl, apenas estendi as funcionalidades da classe genérica ObjectManger e obtive o mesmo resultado da classe UsuarioManager só que com muito menos código.

Espero que tenha sido útil este pequeno tutorial, abaixo segue o arquivo do tutorial em anexo para quem desejar baixar.

Qualquer dúvida é só postar.

Blog PHP