
Variáveis, tipos de dados e operadores
A base de qualquer programa PHP está aqui. Vamos entender como o PHP armazena, classifica e opera sobre dados.
Variáveis
Em PHP toda variável começa com $. Não é preciso declarar o tipo — o PHP descobre sozinho.
php
<?php
$nome = "Ana"; // string
$idade = 28; // inteiro
$altura = 1.65; // float
$ativo = true; // booleano
$nada = null; // ausência de valor
// Nomes válidos: letras, números e _ (não pode começar com número)
$minha_variavel = 1;
$minhaVariavel = 2; // camelCase também funciona
// $1variavel = 3; // INVÁLIDO — erro!
Variáveis em PHP são case-sensitive: $Nome e $nome são variáveis diferentes.
Tipos de dados
PHP tem 8 tipos nativos. Os mais usados são:
String
Texto entre aspas simples ou duplas. A diferença importante é que aspas duplas interpolam variáveis:
php
<?php
$produto = "camiseta";
$preco = 49.90;
// Aspas duplas: interpola variáveis dentro da string
echo "O $produto custa R$ $preco";
// O camiseta custa R$ 49.9
// Aspas simples: exibe literalmente, sem interpolar
echo 'O $produto custa R$ $preco';
// O $produto custa R$ $preco
// Sintaxe curly para casos ambíguos
echo "Temos {$produto}s em estoque";
// Temos camisetas em estoque
Integer (inteiro)
Números sem casas decimais. Pode ser negativo.
php
<?php
$positivo = 42;
$negativo = -10;
$binario = 0b1010; // 10 em binário
$octal = 0777; // 511 em octal
$hex = 0x1A; // 26 em hexadecimal
$grande = 1_000_000; // PHP 7.4+: underscore para legibilidade
echo $grande; // 1000000
Float (ponto flutuante)
Números com casas decimais:
php
<?php
$pi = 3.14159;
$cientifico = 1.5e3; // 1500.0
$negativo = -2.7e-2; // -0.027
// ATENÇÃO: floats têm imprecisão inerente
echo 0.1 + 0.2; // 0.30000000000000004 ← não é bug, é IEEE 754
echo round(0.1 + 0.2, 2); // 0.3 ← use round() para dinheiro
Boolean
Verdadeiro ou falso. Muito usado em condicionais:
php
<?php
$logado = true;
$banido = false;
// Valores que o PHP trata como false (falsy):
// false, 0, 0.0, "", "0", [], null
// Valores que o PHP trata como true (truthy):
// qualquer número != 0, string não vazia, array não vazio
Null
Representa ausência de valor:
php
<?php
$dado = null;
var_dump($dado); // NULL
var_dump(isset($dado)); // bool(false) — isset() retorna false para null
Inspecionando variáveis
Duas funções essenciais para debug:
php
<?php
$dados = [1, "dois", true, null, 3.14];
// var_dump: mostra tipo E valor (mais completo)
var_dump($dados);
/*
array(5) {
[0]=> int(1)
[1]=> string(4) "dois"
[2]=> bool(true)
[3]=> NULL
[4]=> float(3.14)
}
*/
// print_r: mais legível, sem tipos (bom para arrays)
print_r($dados);
/*
Array ( [0] => 1 [1] => dois [2] => 1 [3] => [4] => 3.14 )
*/
// gettype: retorna o tipo como string
echo gettype(3.14); // double
echo gettype("oi"); // string
Conversão de tipos (casting)
O PHP converte tipos automaticamente, mas você pode forçar a conversão:
php
<?php
$texto = "42abc";
$numero = "3.14";
$booleano = true;
// Casting explícito
echo (int) $texto; // 42 — para na letra
echo (float) $numero; // 3.14
echo (string) $booleano; // "1" — true vira "1", false vira ""
echo (bool) 0; // false (exibe vazio)
echo (array) "olá"; // Array com um elemento: ["olá"]
// Funções de conversão (mais seguras)
echo intval("42abc"); // 42
echo floatval("3.14x"); // 3.14
echo strval(100); // "100"
echo boolval(0); // false
Operadores
Aritméticos
php
<?php
$a = 10;
$b = 3;
echo $a + $b; // 13 — soma
echo $a - $b; // 7 — subtração
echo $a * $b; // 30 — multiplicação
echo $a / $b; // 3.333... — divisão (sempre float se não for exato)
echo $a % $b; // 1 — módulo (resto da divisão)
echo $a ** $b; // 1000 — potência (10³)
// Incremento e decremento
$x = 5;
echo $x++; // 5 — retorna ANTES de incrementar
echo $x; // 6
echo ++$x; // 7 — incrementa ANTES de retornar
echo $x--; // 7 — retorna ANTES de decrementar
echo $x; // 6
Atribuição
php
<?php
$n = 10;
$n += 5; // $n = $n + 5 → 15
$n -= 3; // $n = $n - 3 → 12
$n *= 2; // $n = $n * 2 → 24
$n /= 4; // $n = $n / 4 → 6
$n %= 4; // $n = $n % 4 → 2
$n **= 3; // $n = $n ** 3 → 8
$texto = "Olá";
$texto .= ", mundo!"; // concatenação: "Olá, mundo!"
Comparação — == vs ===
Essa diferença é uma das mais importantes do PHP:
php
<?php
// == (igualdade fraca): compara VALOR, converte tipos
var_dump(0 == "a"); // true ← CUIDADO! PHP 7
var_dump(0 == false); // true
var_dump("1" == 1); // true
var_dump("" == false); // true
// === (igualdade estrita): compara VALOR e TIPO
var_dump(0 === "a"); // false ← correto
var_dump("1" === 1); // false
var_dump(1 === true); // false
// Regra de ouro: sempre prefira === em comparações
php
<?php
// Tabela de operadores de comparação
$a = 10; $b = 20;
var_dump($a == $b); // false — igual (fraco)
var_dump($a === $b); // false — idêntico (estrito)
var_dump($a != $b); // true — diferente (fraco)
var_dump($a !== $b); // true — não idêntico (estrito)
var_dump($a < $b); // true — menor
var_dump($a > $b); // false — maior
var_dump($a <= $b); // true — menor ou igual
var_dump($a >= $b); // false — maior ou igual
// Spaceship operator <=> (PHP 7+): retorna -1, 0 ou 1
echo 1 <=> 2; // -1 (menor)
echo 2 <=> 2; // 0 (igual)
echo 3 <=> 2; // 1 (maior)
// Muito usado em funções de ordenação (usort)
Lógicos
php
<?php
$logado = true;
$admin = false;
// && e || (alta precedência — prefira estes)
var_dump($logado && $admin); // false — ambos precisam ser true
var_dump($logado || $admin); // true — basta um ser true
var_dump(!$logado); // false — negação
// and e or (baixa precedência — cuidado!)
$resultado = true and false; // $resultado = true (!) — armadilha
$resultado = (true and false); // $resultado = false — use parênteses
Ternário e Null Coalescing
php
<?php
$idade = 20;
// Ternário: condição ? se_true : se_false
$status = ($idade >= 18) ? "adulto" : "menor";
echo $status; // adulto
// Ternário encurtado ?: (Elvis operator)
$nome = "" ?: "Visitante"; // se falsy, usa o da direita
echo $nome; // Visitante
// Null coalescing ?? — só verifica null/indefinido
$usuario = null;
$nome = $usuario ?? "Anônimo";
echo $nome; // Anônimo
// Encadeado
$a = null; $b = null; $c = "encontrei!";
echo $a ?? $b ?? $c; // encontrei!
// ??= atribuição com null coalescing (PHP 7.4+)
$config = null;
$config ??= "valor padrão";
echo $config; // valor padrão
Constantes
Diferente de variáveis, constantes não mudam e não levam $:
php
<?php
// define() — tradicional, funciona em qualquer escopo
define('PI', 3.14159);
define('APP_NAME', 'Meu Sistema');
define('MAX_TENTATIVAS', 3);
// const — moderno, só funciona no escopo global ou em classes
const VERSAO = '1.0.0';
echo PI; // 3.14159
echo APP_NAME; // Meu Sistema
// Constantes predefinidas do PHP
echo PHP_VERSION; // 8.3.x
echo PHP_EOL; // quebra de linha do SO
echo PHP_INT_MAX; // 9223372036854775807
echo PHP_FLOAT_MAX; // 1.7976931348623E+308
echo __FILE__; // caminho completo do arquivo atual
echo __LINE__; // número da linha atual
Exemplo prático completo — calculadora de IMC
php
<?php
// Dados de entrada
$peso = 78.5; // kg
$altura = 1.75; // metros
// Cálculo
$imc = $peso / ($altura ** 2);
$imc = round($imc, 2); // arredonda para 2 casas
// Classificação com operadores de comparação
if ($imc < 18.5) {
$classificacao = "Abaixo do peso";
$cor = "#3b82f6";
} elseif ($imc < 25.0) {
$classificacao = "Peso normal";
$cor = "#22c55e";
} elseif ($imc < 30.0) {
$classificacao = "Sobrepeso";
$cor = "#f59e0b";
} else {
$classificacao = "Obesidade";
$cor = "#ef4444";
}
$nome = "Carlos";
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head><meta charset="UTF-8"><title>IMC</title></head>
<body style="font-family: sans-serif; padding: 2rem; text-align: center;">
<h2>Resultado do IMC de <?= $nome ?></h2>
<p style="font-size: 3rem; font-weight: bold; color: <?= $cor ?>">
<?= $imc ?>
</p>
<p style="font-size: 1.25rem; color: <?= $cor ?>">
<?= $classificacao ?>
</p>
<p style="color: #666">
Peso: <?= $peso ?>kg | Altura: <?= $altura ?>m
</p>
</body>
</html>
Resumo do capítulo
| Conceito | Detalhe |
|---|---|
| Variáveis | Sempre com $, tipagem dinâmica, case-sensitive |
| Tipos | string, int, float, bool, null (+ array e object) |
| Debug | var_dump() mostra tipo+valor, print_r() é mais legível |
| Casting | (int), (float), (string) ou intval(), floatval() |
== vs === | == compara valor, === compara valor e tipo |
?? | Null coalescing — fallback quando a variável é null |
| Constantes | define() ou const, sem $, imutáveis |