Pular para conteúdo

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.

🌟 Constructor Property Promotion

// Antes (PHP 7.4)
class User {
    public string $name;
    public function __construct($name) {
        $this->name = $name;
    }
}

🌟 Constructor Property Promotion

// 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.