PHP Orientado a objetos.
Classes e métodos
-
Criamos uma classe em php com a sintaxe "class Nome_da_classe", lembrando sempre de colocar a primeira letra do nome da classe maiuscula.
-
Para instanciarmos um objeto utilizamos a sintaxe "$nome_objeto = new Nome_da_classe();".
-
Para criarmos um método de serviço dentro da classe colocamos o termo "Public" na frente do termo "Function", ou seja, "public function nome_do_metodo()".
-
O método precisa receber os paramêtros para realizar o serviço e a passagem funciona como qualquer outra "nome_do_metodo(tipo_de_dado $parametro)".
-
Podemos também adicionar o tipo de retorno do método "nome_do_metodo($parametros): tipo_de_retorno".
-
Dentro do método podemos utilizar a pseudo-váriavel "$this" que será uma referência ao nosso objeto dentro do método.
-
Em um método que tem retorno vazio e possui if e else podemos utilizar a sintaxe "return;" dentro do if para podermos eliminar o else e deixar o código mais limpo.
Modificadores de acesso
-
Colocamos o termo "private" na frente do nome do atributo para fazer com que apenas a própria classe tenha acesso ao atributo, se tentarmos modificar o atributo fora da classe não poderemos realizar a operação, isto se chama encapsulamento.
-
Utilizamos Protected para permitir acessar o atributo dentro de sua própria classe e dentro das classes filhas mas não para classes exteriores.
Métodos de acesso
-
Os métodos que devolvem um valor de atributo da classe são chamados de Métodos Getter.
-
Os métodos que definem o valor em um atributo privado são chamados de Métodos Setter.
Método Construtor e Destrutor
-
O método construtor é feito com "public function __construct()", este método é chamado no momento em que a classe é construida com o termo "new".
-
O construtor pode inicializar atributos, fazendo com que para criar o objeto seja obrigatório passar os valores dos atributos caso eles não recebam um valor dentro do método. por exemplo, para criar uma conta bancária iniciamos o saldo com 0 no construtor e colocamos dentro do construtor que é necessário informar CPF e Titular para criar o objeto.
-
Devemos sempre separar os métodos para que eles tenham uma única função, evitando colocar tudo dentro do construtor deixando o código dificil de ser lido.
-
Na hora de interpetar códigos o php utiliza uma ferramenta chamada de Garbage Collector, que limpa da memória instâncias que não saõ apontadas por nenhuma váriavel e estão lá só para ocupar memória.
-
O método mágico "__destruct()" é executado quando uma instância é apagada da memória peloo garbage collector.
Refatorar
-
Refatorar é um conceito importante para um código bom, nele nós alteramos o código de modo que ele fique mais legivel mas sem alterar seu comportamento.
-
Isto facilita o trabalho de quem utilizar nosso código pois fica um código muito mias fácil de se ler e compreender.
Métodos estáticos
-
Um atributo pode pertencer a classe e não a instância dos objetos criados, para isso adicionamos o "static" na criação do atributo. O mesmo se aplica a métodos.
-
Para utilizar o static utilizamos "Nome_da_classe + :: + nome_do_atributo/nome_do_metodo".
Self e This
-
Utilizamos o this para referenciar o objeto dentro da classe.
-
O termo "self" serve para referenciar a classe utilizada no momento, mesmo conceito do $this mas para classes.
Composição
- Composição de objetos é quando instânciamos um objeto de uma classe dentro de outra classe. No exemplo temos a classe Titular com Nome e CPF, colocamos o atributo titular dentro da classe Conta e no programa principal instânciamos o objeto com a classe Conta que possuí os dois atributos da classe Titular.
Herança
-
A Herança possibilita que as classes compartilhem seus atributos, métodos e outros membros da classe entre si.
-
Para a ligação entre as classes, a herança adota um relacionamento esquematizado hierarquicamente. (Classe Base e Classe Derivada).
-
Utilizamos o termo "parent" para chamar o construtor da classe mãe ao criar o objeto de uma classe filha.
-
Quando queremos impedir que uma classe seja extendida por outras classes para evitar problemas podemos adicionar "final" na frente de class. É possível fazer isso com métodos também para evitar a sobrescrita de um método.
Namespace/use
-
O namespace serve para separarmos as classes em pacotes. Isto ajuda quando temos arquivos com mesmos nomes ou baixamos um projeto pronto.
-
Se em uma classe com namespace definido precisarmos acessar classes de outro namespace, precisamos adicionar o "use" ou informar o seu nome completo (namespace + nome da classe).
-
Se formos "importar" mais de uma classe do mesmo namespace utilizando o use podemos colocá-las em uma só linha utilizando {}
Autoloader
-
A função spl_autoload_register faz com que importemos os arquivos das classes autoamticamente sem precisar do require_once.
-
Como estamos utilizando namespace a string recebida vem com o nome completo do arquivo, fazemos então o replace de "Alura\Banco" por "src" para importar corretamente.
-
Sistemas operacionais diferentes mudam como colocar o caminho de um arquivo utilizando / ou , para isso fazemos o replace utilizando o DIRECTORY_SEPARATOR que identifica o sistema que está sendo utilizado e faz o replace corretamente para que o caminho do arquivo seja encontrado.
-
Para finalizar adicionamos o .php na string do caminho utilizando "$NomeDaString .= '.php';
Sobrescrita de métodos
- A Sobrescrita de métodos é quando nós temos o mesmo método em classes diferentes mas com funcionalidades diferentes. No exemplo estamos utilizando conta corrente e conta poupança, as duas realizam saque mas a tarifa para elas é diferente, neste caso a sobrescrita funciona bem, implementamos o mesmo método mudando apenas o valor da tarifa.
Métodos Abstratos | Classes Abstratas
-
Uma classe abstrata é uma classe que não está completa. Ela precisa de outras classes, que extendem ela, para completá-la.
-
Uma classe abstrata não pode ser instânciada.
-
Uma classe abstrata precisa de pelo menos um método abstrato para ser criada.
-
Métodos abstratos são métodos pertencentes a uma classe abstrata e que não são implementados, implementamos eles apenas nas classes filhas.
-
Quando temos um método abstrato obrigatóriamente temos que implementar ele em todas as classes filhas.
Polimorfismo
- É quando duas ou mais classes derivadas da mesma superclasse podem invocar métodos que têm a mesma assinatura, mas comportamentos distintos.
Interface
-
Uma interface é uma classe abstrata onde todos os métodos dela são abstratos.
-
Todas as classes que implementam uma interface precisam ter TODOS os métodos da interface.
-
É uma maneira de contornar a falta de herança múltipla, que não existe em php mas existe em linguagens como c++.
Métodos Mágicos
-
Métodos mágicos sempre possuem __ no inicio do seu nome. "__nomeMetodo()".
-
No método __toString() podemos formatar uma string como quisermos e na hora de exibir basta chamar o método.
Traits
-
É uma forma do php pegar um código e injetar em uma classe.
-
Para utilizar a trait basta digitar "use + Nome_Arquivo_Trait" dentro do corpo da classe, isto fará com que os códigos na trait sejam colados dentro da classe.