Introdução ao PHP para desenvolvedores front-end

Você já domina HTML, CSS e JavaScript, mas quer dar o próximo passo além do front-end? O PHP é uma linguagem de programação do lado do servidor que pode complementar suas habilidades e permitir a criação de sites dinâmicos e interativos. Neste artigo, vamos explorar os conceitos básicos do PHP e como ele se integra ao seu conhecimento de front-end.

O que é PHP e por que aprender?

PHP (Hypertext Preprocessor) é uma linguagem de programação de código aberto amplamente utilizada para desenvolvimento web do lado do servidor. Diferente do JavaScript, que é executado no navegador do usuário, o PHP é processado no servidor antes que a página seja enviada ao navegador.

Razões para aprender PHP como desenvolvedor front-end:

  • Versatilidade: Permite criar sites dinâmicos e interativos com funcionalidades que o front-end sozinho não consegue proporcionar.
  • Popularidade: Utilizado por mais de 75% dos sites da web, inclusive grandes plataformas como WordPress, Facebook e Wikipedia.
  • Fácil aprendizado: A sintaxe é relativamente simples, especialmente para quem já conhece JavaScript.
  • Integração com bancos de dados: Conecta-se facilmente a bancos de dados como MySQL, PostgreSQL e outros.
  • Empregabilidade: Expande suas oportunidades de trabalho no mercado de desenvolvimento web.

Configurando o ambiente de desenvolvimento

Para começar a desenvolver com PHP, você precisa de um servidor web com suporte a PHP. Eis algumas opções:

1. Pacotes "tudo em um"

A maneira mais simples de começar é utilizar pacotes que já incluem servidor web, PHP e banco de dados:

  • XAMPP: Inclui Apache, MySQL, PHP e Perl. Disponível para Windows, macOS e Linux.
  • WAMP: Similar ao XAMPP, mas específico para Windows (Windows, Apache, MySQL, PHP).
  • MAMP: Para usuários de macOS (Mac, Apache, MySQL, PHP).

2. Usando o servidor embutido do PHP (para desenvolvimento)

A partir do PHP 5.4, você pode utilizar o servidor web embutido para desenvolvimento local:

# Navegue até o diretório do seu projeto
cd /caminho/para/seu/projeto

# Inicie o servidor na porta 8000
php -S localhost:8000

Este servidor é recomendado apenas para desenvolvimento e testes, não para ambientes de produção.

Sintaxe básica do PHP

O código PHP é delimitado por tags especiais que permitem alternar entre código PHP e HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Minha Primeira Página PHP</title>
</head>
<body>
    <h1>Olá, mundo!</h1>
    
    <?php
    // Isto é código PHP
    $mensagem = "Bem-vindo ao PHP!";
    echo "<p>$mensagem</p>";
    
    // Você pode incluir HTML diretamente na saída
    echo "<div class='destaque'>PHP é poderoso</div>";
    ?>
    
    <!-- De volta ao HTML normal -->
    <p>Este é o HTML novamente.</p>
    
    <?php
    // Outra seção PHP
    $ano = date("Y");
    echo "<p>Estamos em $ano</p>";
    ?>
</body>
</html>

Variáveis e tipos de dados

Em PHP, as variáveis são declaradas com o símbolo $ e não precisam de declaração de tipo:

<?php
// Variáveis em PHP começam com $
$nome = "João";            // String
$idade = 25;               // Integer
$altura = 1.75;            // Float
$desenvolvedor = true;     // Boolean
$habilidades = ["HTML", "CSS", "JavaScript"]; // Array
$pessoa = null;            // Null

// PHP é fracamente tipado e faz conversão automática
$soma = "5" + 10;  // $soma será 15 (integer)

// Concatenação de strings usa o operador .
echo "Meu nome é " . $nome . " e tenho " . $idade . " anos.";

// Strings com aspas duplas interpretam variáveis diretamente
echo "Meu nome é $nome e tenho $idade anos.";
?>

Estruturas de controle

PHP suporta as estruturas de controle padrão que você provavelmente já conhece do JavaScript:

<?php
// Condicionais
$idade = 20;

if ($idade < 18) {
    echo "Menor de idade";
} elseif ($idade < 65) {
    echo "Adulto";
} else {
    echo "Idoso";
}

// Switch
$diaDaSemana = date("w");
switch ($diaDaSemana) {
    case 0:
        echo "Domingo";
        break;
    case 1:
        echo "Segunda-feira";
        break;
    // ...outros dias...
    default:
        echo "Dia inválido";
}

// Loops
// For
for ($i = 1; $i <= 5; $i++) {
    echo "Número: $i 
"; } // While $contador = 1; while ($contador <= 5) { echo "Contador: $contador
"; $contador++; } // Foreach (para arrays) $tecnologias = ["HTML", "CSS", "JavaScript", "PHP"]; foreach ($tecnologias as $tecnologia) { echo "$tecnologia é importante para web
"; } // Foreach com chave => valor $detalhes = [ "nome" => "João", "profissao" => "Desenvolvedor", "especialidade" => "Front-end" ]; foreach ($detalhes as $chave => $valor) { echo "$chave: $valor
"; } ?>

Funções

As funções em PHP são definidas usando a palavra-chave function:

<?php
// Definindo uma função simples
function saudacao($nome) {
    return "Olá, $nome!";
}

// Chamando a função
echo saudacao("Maria");  // Saída: Olá, Maria!

// Função com parâmetros padrão
function calcularTotal($preco, $quantidade = 1, $taxa = 0.1) {
    return $preco * $quantidade * (1 + $taxa);
}

echo calcularTotal(100);        // 110 (usando valores padrão)
echo calcularTotal(100, 2);     // 220 (preço: 100, quantidade: 2, taxa padrão: 0.1)
echo calcularTotal(100, 2, 0.2); // 240 (todos os parâmetros especificados)

// Funções anônimas (útil para callbacks)
$somar = function($a, $b) {
    return $a + $b;
};

echo $somar(5, 3);  // 8
?>

Integrando PHP com HTML, CSS e JavaScript

Uma das grandes vantagens do PHP é a facilidade de integração com as tecnologias front-end. Vamos ver algumas formas de fazer isso:

1. Gerando HTML dinamicamente

O PHP pode gerar HTML com base em condições, loops ou dados do banco de dados:

<!DOCTYPE html>
<html>
<head>
    <title>Lista de Produtos</title>
    <style>
        .produto { border: 1px solid #ddd; padding: 10px; margin: 10px; }
        .destaque { background-color: #ffffcc; }
    </style>
</head>
<body>
    <h1>Nossos Produtos</h1>
    
    <div class="produtos">
        <?php
        // Simulando dados que poderiam vir de um banco de dados
        $produtos = [
            ["id" => 1, "nome" => "Camisa", "preco" => 49.90, "destaque" => true],
            ["id" => 2, "nome" => "Calça", "preco" => 89.90, "destaque" => false],
            ["id" => 3, "nome" => "Tênis", "preco" => 129.90, "destaque" => true],
            ["id" => 4, "nome" => "Boné", "preco" => 29.90, "destaque" => false]
        ];
        
        // Gerando HTML com PHP
        foreach ($produtos as $produto) {
            // Decidindo a classe CSS com base em uma condição
            $classe = $produto["destaque"] ? "produto destaque" : "produto";
            
            // Gerando o HTML para cada produto
            echo "<div class='$classe'>";
            echo "<h3>{$produto['nome']}</h3>";
            echo "<p>Preço: R$ " . number_format($produto['preco'], 2, ',', '.') . "</p>";
            echo "<button data-id='{$produto['id']}'>Comprar</button>";
            echo "</div>";
        }
        ?>
    </div>
    
    <script>
        // JavaScript para interagir com o HTML gerado pelo PHP
        document.querySelectorAll('button').forEach(button => {
            button.addEventListener('click', function() {
                const produtoId = this.getAttribute('data-id');
                alert(`Produto ${produtoId} adicionado ao carrinho!`);
            });
        });
    </script>
</body>
</html>

2. Incluindo arquivos

PHP permite dividir seu código em múltiplos arquivos e incluí-los quando necessário, o que é útil para reutilização e organização:

<!-- header.php -->
<!DOCTYPE html>
<html>
<head>
    <title>Meu Site</title>
    <link rel="stylesheet" href="css/styles.css">
</head>
<body>
    <header>
        <nav>
            <ul>
                <li><a href="index.php">Home</a></li>
                <li><a href="sobre.php">Sobre</a></li>
                <li><a href="contato.php">Contato</a></li>
            </ul>
        </nav>
    </header>
    <main>

<!-- footer.php -->
    </main>
    <footer>
        <p>© 2024 Meu Site. Todos os direitos reservados.</p>
    </footer>
    <script src="js/scripts.js"></script>
</body>
</html>

<!-- index.php -->
<?php include 'header.php'; ?>

<h1>Bem-vindo ao Meu Site</h1>
<p>Este é o conteúdo da página inicial.</p>

<?php include 'footer.php'; ?>

Há quatro funções para incluir arquivos em PHP, com diferenças sutis:

  • include: Inclui o arquivo e continua mesmo se o arquivo não existir (emite warning)
  • require: Inclui o arquivo e gera erro fatal se não existir
  • include_once: Garante que o arquivo seja incluído apenas uma vez
  • require_once: Garante que o arquivo seja incluído apenas uma vez e gera erro fatal se não existir

Trabalhando com formulários

Os formulários são uma parte essencial da interação entre o front-end e o back-end. PHP facilita o processamento de dados de formulários:

<!-- formulario.php -->
<!DOCTYPE html>
<html>
<head>
    <title>Formulário de Contato</title>
</head>
<body>
    <h1>Entre em Contato</h1>
    
    <?php
    // Verificando se o formulário foi enviado
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // Recuperando dados do formulário
        $nome = $_POST["nome"];
        $email = $_POST["email"];
        $mensagem = $_POST["mensagem"];
        
        // Validação básica
        $erros = [];
        
        if (empty($nome)) {
            $erros[] = "Nome é obrigatório";
        }
        
        if (empty($email)) {
            $erros[] = "Email é obrigatório";
        } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $erros[] = "Email inválido";
        }
        
        if (empty($mensagem)) {
            $erros[] = "Mensagem é obrigatória";
        }
        
        // Se não houver erros, processar os dados
        if (empty($erros)) {
            // Aqui você poderia salvar no banco de dados, enviar e-mail, etc.
            $sucesso = "Mensagem enviada com sucesso!";
            
            // Limpar os dados do formulário após envio bem-sucedido
            $nome = $email = $mensagem = "";
        }
    }
    ?>
    
    <?php if (!empty($sucesso)): ?>
        <div style="color: green;"><?php echo $sucesso; ?></div>
    <?php endif; ?>
    
    <?php if (!empty($erros)): ?>
        <div style="color: red;">
            <ul>
                <?php foreach ($erros as $erro): ?>
                    <li><?php echo $erro; ?></li>
                <?php endforeach; ?>
            </ul>
        </div>
    <?php endif; ?>
    
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
        <div>
            <label for="nome">Nome:</label>
            <input type="text" id="nome" name="nome" value="<?php echo isset($nome) ? htmlspecialchars($nome) : ''; ?>">
        </div>
        
        <div>
            <label for="email">Email:</label>
            <input type="email" id="email" name="email" value="<?php echo isset($email) ? htmlspecialchars($email) : ''; ?>">
        </div>
        
        <div>
            <label for="mensagem">Mensagem:</label>
            <textarea id="mensagem" name="mensagem"><?php echo isset($mensagem) ? htmlspecialchars($mensagem) : ''; ?></textarea>
        </div>
        
        <button type="submit">Enviar</button>
    </form>
</body>
</html>

Observações importantes sobre segurança:

  • Use htmlspecialchars() para evitar ataques XSS ao exibir dados inseridos pelo usuário.
  • Sempre valide os dados do formulário no servidor, mesmo que já tenha validação no front-end.
  • Use prepared statements quando trabalhar com bancos de dados para evitar injeção de SQL.

Conectando-se a bancos de dados

Uma das tarefas mais comuns no back-end é interagir com bancos de dados. PHP oferece várias formas de fazer isso:

Conexão com MySQL usando MySQLi

<?php
// Parâmetros de conexão
$host = "localhost";
$usuario = "root";
$senha = "";
$banco = "meu_banco";

// Criar conexão
$conexao = new mysqli($host, $usuario, $senha, $banco);

// Verificar conexão
if ($conexao->connect_error) {
    die("Falha na conexão: " . $conexao->connect_error);
}

// Consulta SELECT
$sql = "SELECT id, nome, email FROM usuarios";
$resultado = $conexao->query($sql);

if ($resultado->num_rows > 0) {
    // Exibir dados
    echo "<table border='1'>";
    echo "<tr><th>ID</th><th>Nome</th><th>Email</th></tr>";
    
    while($row = $resultado->fetch_assoc()) {
        echo "<tr>";
        echo "<td>" . $row["id"] . "</td>";
        echo "<td>" . $row["nome"] . "</td>";
        echo "<td>" . $row["email"] . "</td>";
        echo "</tr>";
    }
    
    echo "</table>";
} else {
    echo "0 resultados encontrados";
}

// Inserir dados com prepared statement (seguro)
$nome = "João Silva";
$email = "joao@exemplo.com";

$stmt = $conexao->prepare("INSERT INTO usuarios (nome, email) VALUES (?, ?)");
$stmt->bind_param("ss", $nome, $email);  // "ss" indica dois parâmetros string

if ($stmt->execute()) {
    echo "Novo registro inserido com sucesso";
} else {
    echo "Erro: " . $stmt->error;
}

$stmt->close();
$conexao->close();
?>

PDO (PHP Data Objects)

O PDO é uma interface de acesso a banco de dados mais moderna e que suporta múltiplos bancos de dados:

<?php
try {
    // Conectar usando PDO
    $pdo = new PDO('mysql:host=localhost;dbname=meu_banco', 'root', '');
    
    // Configurar PDO para lançar exceções em caso de erros
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Consulta SELECT
    $stmt = $pdo->query('SELECT id, nome, email FROM usuarios');
    
    // Exibir resultados
    echo "<table border='1'>";
    echo "<tr><th>ID</th><th>Nome</th><th>Email</th></tr>";
    
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "<tr>";
        echo "<td>" . $row["id"] . "</td>";
        echo "<td>" . $row["nome"] . "</td>";
        echo "<td>" . $row["email"] . "</td>";
        echo "</tr>";
    }
    
    echo "</table>";
    
    // Inserir dados com prepared statement
    $stmt = $pdo->prepare('INSERT INTO usuarios (nome, email) VALUES (:nome, :email)');
    
    $stmt->execute([
        ':nome' => 'Maria Santos',
        ':email' => 'maria@exemplo.com'
    ]);
    
    echo "Novo registro inserido com sucesso";
    
} catch(PDOException $e) {
    echo "Erro: " . $e->getMessage();
}
?>

Criando uma API simples com PHP

Como desenvolvedor front-end, você provavelmente já trabalhou com APIs. Agora você pode criar suas próprias APIs com PHP:

<?php
// api/produtos.php

// Permitir acesso de origens diferentes (CORS)
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

// Conectar ao banco de dados
$pdo = new PDO('mysql:host=localhost;dbname=meu_banco', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Determinar o método HTTP
$method = $_SERVER["REQUEST_METHOD"];

// Processar com base no método
switch($method) {
    case "GET":
        // Buscar produtos
        $stmt = $pdo->prepare("SELECT * FROM produtos");
        $stmt->execute();
        $produtos = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        // Retornar como JSON
        echo json_encode($produtos);
        break;
        
    case "POST":
        // Obter dados enviados
        $dados = json_decode(file_get_contents("php://input"), true);
        
        // Inserir produto
        $stmt = $pdo->prepare("INSERT INTO produtos (nome, preco, descricao) VALUES (:nome, :preco, :descricao)");
        $stmt->execute([
            ':nome' => $dados['nome'],
            ':preco' => $dados['preco'],
            ':descricao' => $dados['descricao']
        ]);
        
        // Retornar resposta
        $resposta = [
            "status" => "success",
            "message" => "Produto adicionado com sucesso",
            "id" => $pdo->lastInsertId()
        ];
        
        echo json_encode($resposta);
        break;
        
    // Outros métodos (PUT, DELETE, etc.)
    default:
        http_response_code(405); // Método não permitido
        echo json_encode(["error" => "Método não permitido"]);
        break;
}
?>

Você pode consumir essa API no front-end usando JavaScript/fetch:

// Consumindo a API com JavaScript
fetch('https://seusite.com/api/produtos.php')
  .then(response => response.json())
  .then(produtos => {
    // Mostrar os produtos na interface
    const listaProdutos = document.getElementById('lista-produtos');
    
    produtos.forEach(produto => {
      const item = document.createElement('div');
      item.innerHTML = `
        <h3>${produto.nome}</h3>
        <p>Preço: R$ ${produto.preco}</p>
        <p>${produto.descricao}</p>
      `;
      listaProdutos.appendChild(item);
    });
  })
  .catch(error => console.error('Erro ao buscar produtos:', error));

Boas práticas e segurança em PHP

Ao trabalhar com PHP, é importante seguir boas práticas para garantir que seu código seja seguro e mantido:

Segurança

  • Validar todas as entradas: Nunca confie em dados enviados pelo usuário.
  • Usar prepared statements: Para evitar injeção de SQL.
  • Escapar saídas: Use htmlspecialchars() para evitar XSS.
  • Proteção contra CSRF: Implementar tokens anti-CSRF em formulários.
  • Configurações seguras: Em produção, desative a exibição de erros ao usuário (display_errors = Off).
  • Senhas: Use password_hash() e password_verify() para gerenciar senhas.

Organização do código

  • MVC (Model-View-Controller): Separe a lógica de negócios, apresentação e controle.
  • Namespaces: Organize seu código em namespaces para evitar conflitos.
  • Autoloading: Use autoloaders para carregar classes automaticamente.
  • Composer: Gerencie dependências com o Composer.

Frameworks PHP populares

Para projetos maiores, considere utilizar frameworks que agilizam o desenvolvimento:

  • Laravel: Framework completo e elegante, com ótima documentação.
  • Symfony: Framework robusto e modular usado por grandes empresas.
  • CodeIgniter: Framework leve e fácil de aprender.
  • Slim: Micro-framework para APIs e aplicações simples.

Conclusão

Para um desenvolvedor front-end, aprender PHP abre novas possibilidades e permite criar aplicações web completas, do front-end ao back-end. O PHP é uma linguagem acessível para quem já conhece JavaScript, e sua integração com HTML e CSS é natural e intuitiva.

Comece com os conceitos básicos apresentados neste artigo, pratique criando pequenos projetos e gradualmente avance para aplicações mais complexas. Muitos desenvolvedores full-stack começaram exatamente dessa forma: dominando o front-end e depois expandindo para o back-end com PHP.

Para continuar seu aprendizado, recomendamos explorar nossos artigos sobre APIs e requisições AJAX para entender melhor como o front-end e o back-end se comunicam, e otimização de desempenho de sites para criar aplicações web rápidas e eficientes.