Projetos: PHP Initializer


Olá pessoas ... e bots.

Não muito tempo atrás estava portanto um projeto mais antigo de VBScript para PHP, afim de primeiro trazer as funcionalidades já existentes para então aprimorá-lo com recursos de uma linguagem decente. No meio do desenvolvimento,  me vi numa situação em que mesmo com o moderno PHP 7 não tinha um conveniente recurso do C# com o qual me acostumei muito: inicializador de objetos, que permite criar instâncias já passando valores para os campos que quiser.
Para deixar claro o quanto isso faz falta, segue um exemplo da inicialização de um objeto em PHP (sem apelar para construtores especializados):

Como se pode observar, após criar uma instância da classe preciso definir o valor de cada propriedade manualmente - complicando o código desnecessariamente.

Normalmente programadores usam alguns métodos para evitar fazer esse trabalho várias vezes em códigos, como:
  • Função para alimentar o objeto
    Encapsular a lógica de criação de objeto num único lugar
  • Construtor especializado
    Criar o objeto já recebendo/calculando valores de propriedades
  • Valores padrão pré estabelecidos no construtor
    Cada instância vir com valores já determinados
O maior problema com técnicas desse tipo é elas manterem (ou até aumentarem) a complexidade do código, apenas mudando onde e quantas vezes será preciso inicializar cada propriedade de um objeto manualmente.

Já no outro lado da terra da programação, o C# permite inicializar objetos de forma bem mais simples:

Embora os passos executados na prática sejam os mesmos (instaciar objecto e definir propriedades), deixar o código mais enxuto enquanto a plataforma cuida dos detalhes é uma boa vantagem para desenvolvedores, pois além de acelerar o tempo de programação de um sistema e focar no que importa - a lógica do sistema -  também diminui o número de de lugares onde podem haver erros, facilitando a manutenção do código.

Como esse recurso ainda não foi oficialmente adicionado ao PHP, fiz minha própria biblioteca para implementar inicializadores de objetos em PHP puro, através de Traits (recurso  que permite compartilhar funcionalidades entre classes sem usar herança).

Segue o exemplo prático que uso para testar a biblioteca a cada mudança/atualização:

Como você pode reparar, o código para inicializar os objetos (linhas 32 - 39) fica mais simples e direto dessa forma. Por baixo dos panos é utilizado um recurso bastante leve: um construtor padrão que copia os valores de um objeto ou array recebido, de acordo com o nome de propriedade ou chave do array.

Esse projeto está disponível no meu portfólio no GitHub, em duas edições distintas:
Sendo um projeto opensource com licença LGPL 3 você pode usá-lo à vontade, seja para fins educativos, comerciais ou qualquer outro.
E se quiser fazer alguma contribuição a este desenvolvedor independente, fique à vontade. :)

Comentários