Tema
Sintaxis, variables y tipos
Aquí escribirás tus primeros scripts de verdad. Aprenderás las reglas básicas de sintaxis, cómo guardar datos en variables, qué tipos de datos existen en PHP y cómo activar el modo estricto para escribir código más confiable.
Concepto
Reglas básicas de sintaxis
- El código PHP va dentro de
<?php ... ?>. - Cada instrucción termina en punto y coma
;. - Las variables empiezan con
$:$precio,$nombreCliente. - Los nombres de variables distinguen mayúsculas:
$totaly$Totalson distintas. - Las funciones y palabras clave no distinguen mayúsculas (
echo=ECHO), pero escribe todo en minúsculas por convención. - Comentarios:
php
<?php
// Comentario de una línea
# También de una línea (menos usado)
/*
Comentario
de varias líneas
*/
/**
* Comentario de documentación (DocBlock).
* Lo usan los editores para mostrarte ayuda.
*/Variables: cajas con etiqueta
Una variable es como una caja con una etiqueta: la etiqueta es el nombre ($edad) y dentro guardas un valor (25). Puedes cambiar el contenido cuando quieras.
php
<?php
$edad = 25; // Guardamos 25
$edad = $edad + 1; // Ahora vale 26
echo $edad; // 26En PHP no necesitas declarar el tipo: se deduce del valor (tipado dinámico). Convenciones de nombres:
camelCasepara variables y funciones:$precioFinal,calcularIva().PascalCasepara clases:Producto.MAYUSCULAS_CON_GUIONpara constantes:IVA,MAX_INTENTOS.
Constantes
Valores que no cambian durante la ejecución. No llevan $.
php
<?php
const IVA = 0.16; // Forma moderna (recomendada)
define('NOMBRE_SITIO', 'Mi Tienda'); // Forma clásica, útil dentro de condiciones
echo IVA; // 0.16
echo NOMBRE_SITIO; // Mi Tienda
// IVA = 0.20; // Error: no se puede reasignar una constanteTipos de datos
| Tipo | Ejemplo | Para qué |
|---|---|---|
int | 42, -7, 1_000_000 | Números enteros |
float | 3.14, 0.16, 1.5e3 | Números con decimales |
string | 'hola', "Ana" | Texto |
bool | true, false | Sí/no |
array | [1, 2, 3], ['nombre' => 'Ana'] | Listas y diccionarios |
null | null | "Sin valor" |
object | new DateTime() | Instancias de clases |
callable | fn($x) => $x * 2 | Funciones guardadas en variables |
php
<?php
$cantidad = 3; // int
$precio = 199.90; // float
$producto = 'Playera'; // string
$disponible = true; // bool
$tallas = ['S', 'M', 'L'];// array
$descuento = null; // null (aún no hay descuento)
// var_dump muestra tipo y valor: tu mejor amigo para depurar
var_dump($cantidad); // int(3)
var_dump($precio); // float(199.9)
var_dump($producto); // string(7) "Playera"
var_dump($disponible); // bool(true)
var_dump($descuento); // NULL
// gettype devuelve el tipo como texto
echo gettype($tallas); // arrayMostrar datos: echo, print, print_r, var_dump
php
<?php
$nombre = 'Luis';
$datos = ['edad' => 30, 'ciudad' => 'Guadalajara'];
echo "Hola, $nombre"; // Imprime texto. Lo más usado.
echo 'A', 'B', 'C'; // echo acepta varios argumentos: ABC
print_r($datos); // Muestra arrays de forma legible
// Array ( [edad] => 30 [ciudad] => Guadalajara )
var_dump($datos); // Igual pero con tipos: ideal para depurar
// Truco: <pre> conserva los saltos de línea en el navegador
echo '<pre>';
print_r($datos);
echo '</pre>';Comillas simples vs dobles
php
<?php
$nombre = 'Ana';
echo 'Hola, $nombre'; // Hola, $nombre → simples: texto literal
echo "Hola, $nombre"; // Hola, Ana → dobles: interpolan variables
echo "Línea 1\nLínea 2"; // \n es salto de línea sólo con comillas dobles
echo 'Hola, ' . $nombre; // El punto . concatena (une) stringsLo verás a fondo en la lección de strings.
Conversión de tipos
PHP convierte tipos automáticamente cuando lo cree necesario (type juggling). A veces es cómodo; otras, peligroso.
php
<?php
var_dump('5' + 3); // int(8) → el string '5' se convierte en número
var_dump('5' . 3); // string(2) "53" → el punto concatena
var_dump(10 / 4); // float(2.5)
var_dump(intdiv(10, 4));// int(2) → división entera
// Conversión explícita (casting): lo recomendable
$edad = (int) '25 años'; // 25 (toma los dígitos iniciales)
$precio = (float) '19.99';
$texto = (string) 100;
$activo = (bool) 0; // false
// Valores que se consideran false: false, 0, 0.0, '', '0', [], null
var_dump((bool) '0'); // bool(false) ¡cuidado!
var_dump((bool) 'false');// bool(true) un string no vacío es trueComprobar tipos
php
<?php
$valor = '42';
var_dump(is_int($valor)); // false (es string)
var_dump(is_numeric($valor)); // true (parece número)
var_dump(is_string($valor)); // true
var_dump(is_array([])); // true
var_dump(is_null(null)); // true
var_dump(isset($noExiste)); // false: ¿existe y no es null?
var_dump(empty('')); // true: ¿está "vacío"? ('' , 0, null, [], '0')Modo estricto: declare(strict_types=1)
Por defecto, si una función espera un int y le pasas '5', PHP lo convierte en silencio. Con el modo estricto, lanza un error. Esto atrapa bugs pronto.
php
<?php
declare(strict_types=1); // Debe ser la PRIMERA instrucción del archivo
function duplicar(int $numero): int
{
return $numero * 2;
}
echo duplicar(5); // 10
echo duplicar('5'); // TypeError: debe ser int, se dio stringBuena práctica
Empieza todos tus archivos sólo-PHP con declare(strict_types=1);. Es estándar en proyectos profesionales y en Laravel moderno.
Ejemplo completo: ficha de producto
php
<?php
declare(strict_types=1);
// Datos del producto
const IVA = 0.16;
$nombre = 'Audífonos Bluetooth';
$precioBase = 850.00; // float
$stock = 12; // int
$enOferta = true; // bool
$descuento = 0.10; // 10 %
// Cálculos
$precioConDescuento = $enOferta ? $precioBase * (1 - $descuento) : $precioBase;
$precioFinal = $precioConDescuento * (1 + IVA);
// number_format(numero, decimales, separador decimal, separador de miles)
$precioTexto = number_format($precioFinal, 2, '.', ',');
?>
<!DOCTYPE html>
<html lang="es">
<head><meta charset="UTF-8"><title><?= $nombre ?></title></head>
<body>
<h1><?= $nombre ?></h1>
<p>Precio final (IVA incluido): $<?= $precioTexto ?> MXN</p>
<p>Stock disponible: <?= $stock ?> piezas</p>
<?php if ($enOferta): ?>
<p><strong>¡En oferta! <?= $descuento * 100 ?> % de descuento</strong></p>
<?php endif; ?>
</body>
</html>Error común
Olvidar el ; produce Parse error: syntax error, unexpected ... y el error suele señalar la línea siguiente a donde falta. Si el error marca la línea 8, revisa también la 7.
Error común
Usar una variable que no existe: Warning: Undefined variable $totl. Casi siempre es un error de escritura. Activa error_reporting = E_ALL para verlos todos.
Ejercicios
- Declara variables para tu nombre, edad, estatura (en metros) y si te gusta programar. Muestra cada una con
var_dump. - Crea un script que convierta grados Celsius a Fahrenheit (
F = C × 9/5 + 32) para 25 °C y muestre el resultado con un decimal. - Predice el resultado de:
var_dump((int) '3.9');,var_dump('10' == '1e1');,var_dump((bool) []);. Luego compruébalo.
Ver solución
php
<?php
declare(strict_types=1);
$nombre = 'Erick';
$edad = 20;
$estatura = 1.75;
$meGustaProgramar = true;
var_dump($nombre, $edad, $estatura, $meGustaProgramar);
// string(5) "Erick" int(20) float(1.75) bool(true)php
<?php
declare(strict_types=1);
$celsius = 25;
$fahrenheit = $celsius * 9 / 5 + 32;
echo "$celsius °C = " . number_format($fahrenheit, 1) . " °F"; // 25 °C = 77.0 °F(int) '3.9'→int(3): el cast a entero trunca, no redondea.'10' == '1e1'→bool(true): dos strings numéricos se comparan como números (1e1 = 10). Por eso usaremos===.(bool) []→bool(false): un array vacío es falso.
Resumen
- Las instrucciones terminan en
;y las variables empiezan con$. - Tipos principales:
int,float,string,bool,array,null,object. var_dump()muestra tipo y valor; úsalo para depurar.- Comillas dobles interpolan variables; simples no.
- Convierte tipos explícitamente con
(int),(float),(string),(bool). - Usa
declare(strict_types=1);al inicio de tus archivos. - Constantes con
const NOMBRE = valor;, sin$.