Aula 02 - Fundamentos de PHP e POO 🏗️
🎯 Objetivo da Aula
- Dominar as estruturas de controle modernas.
- Entender os pilares da POO no PHP 8.
- Aplicar Namespaces e Autoloading.
- Criar classes resilientes e tipadas.
🧱 Blocos de Construção
- Variáveis:
$nome.
- Constantes:
const CURSO = 'PHP'.
- Arrays:
['u' => 1, 'v' => 2].
🎮 Expressão Match (PHP 8)
$status = match($codigo) {
200 => 'OK',
404 => 'Não Encontrado',
default => 'Erro Desconhecido'
};
- Mais limpo que o switch.
- Mais seguro (lança erro se não mapeado).
🧬 O que é POO?
- Programação Orientada a Objetos.
- Representar o mundo real em "Objetos".
- Classe = Planta (modelo).
- Objeto = Casa pronta (instância).
🏰 Os 4 Pilares da POO
graph TD
A[POO] --> B[Encapsulamento]
A --> C[Herança]
A --> D[Abstração]
A --> E[Polimorfismo]
🏠 1. Encapsulamento
- Proteger os dados.
- Visibilidade:
public, protected, private.
- Getters e Setters (ou Propriedades Readonly).
👨👦 2. Herança
- Reutilizar código entre classes.
- Palavra-chave:
extends.
- Evite herança profunda (prefira composição).
🎨 3. Abstração
- Classes que não podem ser instanciadas.
abstract class Animal.
- Define o "quê", não o "como".
🎭 4. Polimorfismo
- "Muitas formas".
- Objetos diferentes que respondem ao mesmo método.
- Baseado em Interfaces.
// Antes (PHP 7.4)
class User {
public string $name;
public function __construct($name) {
$this->name = $name;
}
}
// Depois (PHP 8.x)
class User {
public function __construct(
public string $name
) {}
}
- Menos repetição (DRY).
🛑 Classes Readonly
- Garante imutabilidade.
- Perfeito para DTOs (Data Transfer Objects).
readonly class Configuracao { ... }.
📁 Namespaces
- Como se fossem "pastas digitais" no código.
- Evitam conflitos:
App\Models\User vs Vendor\Utils\User.
📜 Interfaces
- Um contrato que obriga a classe a ter certos métodos.
interface Notificador { public function enviar(); }.
🧩 Traits
- "Copia e cola" de código inteligente.
- Permite reutilizar métodos em classes diferentes sem herança.
📉 Diagrama de Classe Simples
classDiagram
Animal <|-- Cachorro
Animal <|-- Gato
Animal : +String nome
Animal: +fazerSom()
Cachorro: +fazerSom()
Gato: +fazerSom()
⚠️ Null Safe Operator
$user?->address?->city.
- Adeus ao
if ($user !== null && $user->address !== null).
🔬 Type Hinting Avançado
- Tipagem de argumentos.
- Tipagem de retorno.
- Tipagem de propriedades.
💡 Dica de Design
- Favoreça a imutabilidade.
- Use classes ricas (com comportamento), não apenas gavetas de dados.
🧗♂️ Exercício Prático
- Criar a classe
Pedido.
- Usar promoção de propriedades.
- Implementar uma trait de
Desconto.
🏁 Resumo
- POO é a base de tudo no Laravel.
- PHP 8 tornou a POO muito menos verbosa.
- O Autoloading une tudo isso.