Programação Orientada a Objetos no PHP – Parte 2

No que diz respeito ao desempenho, ao compromisso, ao esforço, a dedicação, não existe meio termo. Ou você faz uma coisa bem feito ou não faz.

— Ayrton Senna

Olá galera, daremos continuidade na sequência dos artigos sobre POO no PHP, nesta etapa, iremos abordar sobre automatização de instanciamento, métodos mágicos, método construtor, método destrutor, encapsulamento, métodos acessores e modificadores. Boa leitura!


Automatizando os Instanciamentos

Vamos começar com uma dica para a inclusão de arquivos.

Sabemos que para criar uma instância (objeto) de uma classe, deve-se fazer a inclusão do arquivo, como foi explicado no primeiro post dessa série. No decorrer dos projetos devemos fazer a inclusão de várias classes e por isso vamos desenvolver uma função que faça a inclusão de todas essas que são requisitas pelo operador NEW em diretórios específicos.

Antes de criar a função deve-se organizar a estrutura de diretórios do projeto, na imagem a seguir é mostrado um exemplo dessa estrutura, com dois diretórios: classes e inc. No diretório classes ficarão todas as classes do projeto, já no diretório inc ficará o arquivo conf.inc.php que tem a função de inclusão das classes.

Diretórios do projeto no NetBeans.

Diretórios do projeto no NetBeans.

Nesta série de POO foi utilizado a IDE NetBeans 8.0.2, caso não conheça o significado e função de uma IDE leia o artigo conhecendo o SDK Android que explica os conceitos e utiliza exemplos de IDE.

Agora, vamos abrir o arquivo Conf.inc.php que está no diretório inc. Nesse momento vamos utilizar um dos métodos mágicos do php o __autoload. Ele é utilizado para fazer o carregamento das classes logo que são instanciadas, ou seja, quando criamos um objeto de uma classe, o operador NEW requisita a inclusão do arquivo, e é nesse momento o __autoload se encarrega de fazer esta inclusão. Então mãos a obra! Construa a função abaixo, dentro do arquivo aberto.

 

Observe que criamos uma variável com o mesmo nome do diretório classes, depois foi criado uma condição que verifica se o arquivo existe naquele diretório e, se ele existir será feita a inclusão do mesmo, senão, é terminada a execução do código e exibida uma mensagem informando que não foi possível a inclusão do arquivo solicitado. Agora faça a inclusão do arquivo Conf.inc.php na index.php antes de criar o objeto.

 

O PHP reserva todas as funções com nomes iniciadas com “__” como mágicas. É recomendado que não se utilize funções com nomes __ no PHP, a não ser que se deseje alguma funcionalidade mágica documentada. (php.net)

Essa função pode ser melhorada e alterada para adequá-la à disposição da estrutura de diretórios de cada projeto.


Conceituando: O que são Métodos Mágicos no PHP?

São métodos que são implementados em uma classe com uma função preestabelecida. Eles são invocados quando trabalhamos com as propriedades e métodos de um objeto.

Como já foi citado é fácil seu reconhecimento, pois começam com dois sublinhados (underlines). Segue nomes de alguns métodos mágicos: __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() e __debugInfo().

Não deve-se ter funções com esses nomes em nenhuma de suas classes a não ser que queira a funcionalidade mágica associada a elas.


Método Construtor e Destrutor

Vamos começar mostrando dois métodos mágicos o __construct e __destruct, já sabemos que todos métodos mágicos são iniciados com o __ e tem uma função determinada, sabendo disso vamos conceituar.

  • Método Construtor: É o inicializado pelo operador NEW no momento que instanciamos o objeto, ele gera o comportamento inicial do objeto. No PHP pode ser criado de duas formas, com o mesmo nome da classe ou com o __construct, mas a documentação do PHP (vide documentação clicando aqui ) recomenda que seja usado o __construct para criar o método construtor das classes, pois a forma que era utilizado com o mesmo nome da classe será descontinuada, já no PHP 7.0 já se torna OBSOLETO e serão removidos em uma versão futura.
  • Método Destrutor: O método destrutor ou finalizador é executado ao final do ciclo do objeto, quando o objeto já executou o seu trabalho e tem que ser desalocado da memória, não é muito utilizado, mas serve para finalizar conexões com o banco, apagar arquivos temporários criados durante a execução do objeto e outras circunstâncias.

Um exemplo do método construtor e do destrutor na classe Tv. Foram retirados alguns métodos da classe só para deixar mais simples a execução dos métodos especiais aqui explicados.

 

Observe que o método construtor define o comportamento inicial da classe. Aqui já é passado por parâmetros os valores dos atributos, gerando as características da classe no momento de sua inicialização, e o destrutor finalizando o ciclo de vida do objeto. Não é preciso chamar o destrutor ele é executado automaticamente.

Debug do Construtor e Destrutor.

Debug do Construtor e Destrutor.

 

Encapsulamento

O encapsulamento é o mecanismo que provê a proteção de acesso aos membros internos de uma classe. A POO informa que a classe tem que se responsabilizar por seus atributos e métodos e, uma das formas é utilizando os modificadores de acesso que foram implantados a partir da versão 5 do PHP. Estes modificadores servem para indicar as permissões que terão outros objetos para acessar seus métodos e atributos, são três modificadores de acesso: public, protected e private.

  • public: É o modificador de acesso padrão, ou seja, quando não se define o modificador de acesso de um método ou atributo, esse é interpretado pelo PHP como public. É o modificador mais permissivo, pois os métodos ou atributos public podem ser acessados em qualquer parte do programa.
  • private: É o modificador de acesso mais restritivo. Um atributo ou método private, só pode ser acessado pelo próprio objeto.
  • protected: É um modificador de restrição média. Um atributo ou método protected, pode ser acessado pelo próprio objeto e por objetos das classes filhas (que o herdou).

Na classe TV serão implementados os modificadores de acesso em seus atributos, mas sem uma regra, pois é só para mostrar as características e funções de cada modificador de acesso. No exemplo a seguir são exibidos somente os atributos recebendo cada modificador.

Depois de inserir os modificadores de acesso na classe, vamos acessar eles no arquivo index.php. A IDE NetBeans ajuda a visualizar os atributos e métodos mostrando os modificadores de acesso, observe que na imagem a seguir o objeto só consegue acessar o atributo $cor, pois está com acesso public, já os demais estão com acesso restringido pelos modificadores private e protected.

Modificador de Acesso.

Modificador de Acesso.

Nesse momento a classe se responsabiliza pelos seus atributos utilizando os modificadores de acesso, ela protege o acesso de seus atributos. O private e o protected não ficam visíveis, como já foi falado, os atributos e métodos que são private só podem ser acessados dentro da classe, já o protected pode ser acessado dentro da classe e por suas herdeiras, essa visibilidade do protected será bem absorvida quando utilizarmos HERANÇA.


Métodos Acessores e Modificadores

Geralmente, os campos de dados privados são de natureza técnica e interessam apenas ao criador das operações, portanto o private é o modificador de acesso mais restritivo. Para acessar os atributos que usam o private são utilizados os métodos acessores e modificadores.

  • Acessores (getters): O Acessores (GETTERS) retornam à informação que está no atributo.
  • Modificadores (setters): O modificador (SETTERS) atribui dados aos atributos.

Portanto a classe TV será modificada, começando pelos atributos, que serão só dois: ligar e cor. No construtor também serão apenas os dois atributos que serão inicializados pelo objeto, e será acrescentado os GETTERS e SETTERS de cada atributo, veja o exemplo:

 

Observe a responsabilidade da classe sobre seus atributos, dessa forma não é permitido o acesso direto ao atributo, somente através do GETTERS e SETTERS de cada um. Vamos DEBUGAR essas modificações no arquivo index.php.

 

Nesse momento não foi utilizado ECHO dentro dos métodos, só foi retornado os valores que foram atribuídos pelo construtor aos atributos, o resultado desse DEBUG segue logo abaixo:

debug-get-set


Conclusão

Chegamos ao fim dessa segunda parte, espero que tenham gostado e entendido esses conceitos da POO. Recomendo a leitura e prática constante.

Bons estudos e até a próxima!


Fontes

Livros

  • DALL’OGLIO, P. PHP Programando com Orientação a Objetos. 1° ed. São Paulo: Novatec, 2007.
  • BEZERRA, E. Princípios de Análise e Projeto de Sistemas com UML. Rio de Janeiro: Elsevier, 2002.

Internet


Bhrandon B da Cruz

Bacharel em Administração, Técnico em Programação de Jogos Digitais, Tecnólogo em Análise e Desenvolvimento de Sistemas e Pós-graduando em Desenvolvimento de Aplicações para Web. Especialista em Desenvolvimento Web com PHP e MySQL, estudante das tecnologias JAVA, SQL Server, Bootstrap e CakePHP. Apaixonado por Tecnologia.

Você pode gostar...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

quatro × 2 =