backend

framework

— por Luiz Lins, Prof

O que framework?

É uma estrutura ou plataforma que fornece uma base para o desenvolvimento de software. Ele oferece componentes, bibliotecas e regras pré-definidas que ajudam os desenvolvedores a criar aplicações de forma mais rápida, organizada e com menos código repetitivo.

Principais características de um framework:

Inversão de controle
O framework controla o fluxo do programa, chamando o código do desenvolvedor quando necessário.

1.

Reutilização de código

Fornece funcionalidades comuns prontas.

2.

Padronização

Define uma arquitetura e boas práticas.

3.

4.

Produtividade

Acelera o desenvolvimento ao abstrair tarefas complexas.

Fundamentos

MVC & MVVM

Qual linguagem usar?

Analogia

COMO CHEGUEI NA FACULDADE HOJE?

Todos estamos aqui!

Não importa como chegamos.

O PHP infelizmente ganhou uma má fama e isso não se deve às capacidades da linguagem. Muito pelo contrário! A linguagem é muito poderosa e flexível.

– Vinícius Dias

Por que não usar XAMPP.

Tá?

- O que devo fazer...

Estudar a linguagem que vamos utilizar.

  • CONTROLE DE VERSÃO
  • GERENCIAMENTO DE DEPENDÊNCIAS
  • AMBIENTE DE DESENVOLVIMENTO
  • BANCO DE DADOS
  • FRAMEWORKS POPULARES
  • TESTES AUTOMATIZADOS
  • QUALIDADE DE CÓDIGO
  • SEGURANÇA
  • PADRÕES DE ARQUITETURA
  • SERVIÇOS DE CLOUD
  • DOCUMENTAÇÃO
  • DEVOPS PARA PHP

Tecnologias essenciais para aprendermos PHP

  • APIs E COMUNICAÇÃO
  • CACHE E PERFORMANCE
  • FILAS E PROCESSAMENTO ASSÍNCRONO
  • ARMAZENAMENTO DE ARQUIVOS
  • FERRAMENTAS DE CONSTRUÇÃO E AUTOMAÇÃO
  • MONITORAMENTO E LOGS
  • METODOLOGIAS ÁGEIS
  • FERRAMENTAS DE DESENVOLVIMENTO
  • CONTEINERIZAÇÃO E ORQUESTRAÇÃO
  • FRONT-END INTEGRADO
  • COLABORAÇÃO EM EQUIPE

Vamos começar?

Instalar o php

Linux, mac e windows

Dicas

Conhecimento

Repositório

git@github.com:UniNassauParnaiba/introducao-framework.git

Vamos resolver problemas?

Instalar PHP

Usar variáveis

Pontos Flutuantes

functions

<?php

// ============================================
// 1. FUNÇÃO SIMPLES (sem parâmetros)
// ============================================

function saudacao() {
    echo "Olá, bem-vindo ao PHP!\n";
}

saudacao(); // Chama a função
<?php

// ============================================
// 2. FUNÇÃO COM PARÂMETROS
// ============================================

function somar($a, $b) {
    return $a + $b;
}

$resultado = somar(5, 3);
echo "Soma: $resultado\n"; // Soma: 8
// ============================================
// 3. FUNÇÃO COM PARÂMETROS OPCIONAIS (default)
// ============================================

function saudar($nome, $saudacao = "Olá") {
    return "$saudacao, $nome!";
}

echo saudar("Maria") . "\n";           // Olá, Maria!
echo saudar("João", "Bom dia") . "\n"; // Bom dia, João!
// ============================================
// 4. FUNÇÃO COM TIPAGEM (PHP 7+)
// ============================================

function multiplicar(int $a, int $b): int {
    return $a * $b;
}

echo multiplicar(4, 5) . "\n"; // 20
// ============================================
// 5. FUNÇÃO COM PASSAGEM POR REFERÊNCIA
// ============================================

function dobrarValor(&$numero) {
    $numero *= 2;
}

$valor = 10;
dobrarValor($valor);
echo "Valor dobrado: $valor\n"; // Valor dobrado: 20
// ============================================
// 6. FUNÇÃO COM NÚMERO VARIÁVEL DE ARGUMENTOS
// ============================================

function calcularMedia(...$numeros) {
    if (count($numeros) === 0) return 0;
    return array_sum($numeros) / count($numeros);
}

echo calcularMedia(10, 20, 30) . "\n";      // 20
echo calcularMedia(5, 15, 25, 35, 45) . "\n"; // 25
// ============================================
// 7. FUNÇÃO ANÔNIMA (Closure)
// ============================================

$dobro = function($numero) {
    return $numero * 2;
};

echo $dobro(7) . "\n"; // 14

// Usando closure com array
$numeros = [1, 2, 3, 4, 5];
$dobrados = array_map(function($n) {
    return $n * 2;
}, $numeros);
print_r($dobrados); // [2, 4, 6, 8, 10]
// ============================================
// 8. ARROW FUNCTION (PHP 7.4+)
// ============================================

$triplo = fn($numero) => $numero * 3;
echo $triplo(4) . "\n"; // 12

// Exemplo com array
$precos = [10, 20, 30];
$comDesconto = array_map(fn($p) => $p * 0.9, $precos);
print_r($comDesconto); // [9, 18, 27]
// ============================================
// 9. FUNÇÃO RECURSIVA
// ============================================

function fatorial($n) {
    if ($n <= 1) return 1;
    return $n * fatorial($n - 1);
}

echo "Fatorial de 5: " . fatorial(5) . "\n"; // 120
// ============================================
// 10. FUNÇÃO ESTÁTICA (mantém valor entre chamadas)
// ============================================

function contador() {
    static $count = 0;
    $count++;
    return $count;
}

echo contador() . "\n"; // 1
echo contador() . "\n"; // 2
echo contador() . "\n"; // 3
// ============================================
// 11. FUNÇÃO COM CALLBACK
// ============================================
function processarArray($array, $callback) {
    $resultado = [];
    foreach ($array as $item) {
        $resultado[] = $callback($item);
    }
    return $resultado;
}

$numeros = [1, 2, 3, 4];
$quadrados = processarArray($numeros, function($n) {
    return $n ** 2;
});
print_r($quadrados); // [1, 4, 9, 16]

Capture a 1ª atividade do professor Francisco Coelho e vamos executá-la tendo como foco principal o uso de funções.

Atividade

class

Classes em PHP são estruturas (moldes) para criar objetos, definindo atributos (variáveis) e métodos (funções) que definem o comportamento de uma entidade. Definidas pela palavra-chave class, elas encapsulam dados e funcionalidades, sendo essenciais para a Programação Orientada a Objetos (POO).

  • Instanciação: Criação de objeto com new ($obj = new NomeDaClasse();).
  • Acesso: Uso do operador -> ($obj->nome).
  • $this: Pseudovariável que refere-se ao objeto atual dentro da classe.
  • Declaração: class NomeDaClasse { ... }.
  • Atributos: Variáveis que definem características (public $nome;).
  • Métodos: Funções que definem ações (public function falar() { ... }).

Estrutura básica

<?php
class Pessoa {
    // Atributos
    public $nome;
    public $idade;

    // Construtor (método mágico)
    public function __construct($nome, $idade) {
        $this->nome = $nome;
        $this->idade = $idade;
    }

    // Método
    public function apresentar() {
        return "Olá, meu nome é " . $this->nome . " e tenho " . $this->idade . " anos.";
    }
}

// Instanciando o objeto
$pessoa1 = new Pessoa("João", 25);
echo $pessoa1->apresentar(); 
// Saída: Olá, meu nome é João e tenho 25 anos.
  • Visibilidade: public (acessível de qualquer lugar), protected (acessível na classe e filhas), private (acessível apenas na própria classe).
  • Herança: Usa-se extends para criar classes filhas.
  • Conceito: Uma classe é o "esqueleto" e o objeto é a concretização desse esqueleto.

Pontos Importantes

YouTube - Aula de Object-Oriented Programming (OOP)

Capture a 1ª atividade do professor Francisco Coelho e vamos executá-la tendo como foco principal o uso de funções.

Usando OOP.

Atividade

Resolução do exercício

<?php


class Medico {
    public function __construct(
        private string $crm, 
        private string $nome, 
        private string $especialidade) {
    }
}
<?php

class Paciente {
    public function __construct(
        private string $cpf, 
        private string $nome, 
        private string $telefone, 
        private string $dataNasc) {
    }
}
<?php

include_once 'Medico.php';
include_once 'Paciente.php';

class Consulta {
    public function __construct(
        private Medico $medico, 
        private Paciente $paciente, 
        private string $dia, 
        private string $horario) {
    }
}
<?php

include_once 'Modulos/Medico.php';
include_once 'Modulos/Paciente.php';
include_once 'Modulos/Consulta.php';

$medico = new Medico(
	'123456', 
    'Dr. João', 
    'Cardiologia');
    
$paciente = new Paciente(
	'12345678900', 
    'Maria Silva', 
    '(11) 98765-4321', 
    '01/01/1990');
    
$consulta = new Consulta(
	$medico, 
    $paciente, 
    '10/10/2024', 
    '14:00'); 

var_dump($consulta);

Como formatar um número de telefone seguindo padrões atuais.

Expressões regulares

<?php

class Telefone
{

    public function __construct(private string $numero)
    {
        $digitos = preg_replace('/\D/', '', $numero);
        
        if (strlen($digitos) !== 11) {
            throw new Exception("Formato de telefone inválido", 1);
        }
        
        $this->numero = preg_replace('/(\d{2})(\d{5})(\d{4})/', '($1) $2-$3', $digitos);
    }
    
}
<?php

include_once 'Modulos/Medico.php';
include_once 'Modulos/Paciente.php';
include_once 'Modulos/Consulta.php';
include_once 'Configuracoes/Telefone.php';

try {
    $telefone = new Telefone('869996924534');
    
    $medico = new Medico(
    	'123456', 
        'Dr. João', 
        'Cardiologia');
    
    $paciente = new Paciente(
    	'12345678900', 
        'Maria Silva', 
        $telefone, 
        '01/01/1990');
    
    $consulta = new Consulta(
    	$medico, 
        $paciente, 
        '10/10/2024', 
        '14:00'); 
        
} catch (Exception $e) {
    var_dump($e->getMessage());
    exit;
}

var_dump($consulta);

Projeto da clinica médica

Tentem adicionar mais de um número de telefone ao paciente.

Só pode adicionar no máximo 03 números.

Composer

<?php

use Luizlins\AtividadeClass\Modulos\Medico;
use Luizlins\AtividadeClass\Modulos\Paciente;
use Luizlins\AtividadeClass\Modulos\Consulta;
use Luizlins\AtividadeClass\Configuracoes\Telefone;

require_once 'vendor/autoload.php';

try {
    
    $medico = new Medico('123456', 'Dr. João', 'Cardiologia');

    $telefone = [new Telefone('86999692453'), new Telefone('86999692453')];

    $dataNascimento = new \DateTimeImmutable('2024-10-10');
    $paciente = new Paciente('12345678900', 'Maria Silva', $telefone, $dataNascimento);
    $paciente->adicionarTelefone(new Telefone("86999996676"));

    $dataConsulta = new \DateTimeImmutable('2024-10-10');
    $consulta = new Consulta($medico, $paciente, $dataConsulta, '14:00');

} catch (Exception $e) {
    var_dump($e->getMessage());
    exit;
}   

print_r($consulta);
<?php

$caminhoBanco = __DIR__ . "/banco.sqlite";
$pdo = new PDO("sqlite:$caminhoBanco");

echo "Conectei";

$pdo->exec("
    CREATE TABLE medicos (
        id INTEGER PRIMARY KEY,
        crm TEXT,
        nome TEXT,
        especializacao TEXT
    );
");
<?php

use Luizlins\AtividadeClass\Modulos\Medico;

require_once 'vendor/autoload.php';

$caminhoBanco = __DIR__ . "/banco.sqlite";
$pdo = new PDO("sqlite:$caminhoBanco");

$medico = new Medico(null, "CRM/PI 1233", "Luiz Lins", "Oftomologista");


$sqlInsert = "INSERT INTO medicos
                (
                    crm,
                    nome,
                    especializacao
                ) 
                VALUES (
                    '{$medico->crm()}',
                    '{$medico->nome()}',
                    '{$medico->especialidade()}'
                )";

var_dump($pdo->exec($sqlInsert));
<?php

require_once 'vendor/autoload.php';

$caminhoBanco = __DIR__ . "/banco.sqlite";
$pdo = new PDO("sqlite:$caminhoBanco");


$statement = $pdo->query("SELECT * FROM medicos;");
var_dump($statement->fetchAll());
<?php

// tentem fazer a busca dos dados inseridos.

Backend

By Luiz Lins

Backend

Aula de introdução a backend

  • 67