PHP básico para Laravel: lo que necesitas saber antes de empezar
Laravel está escrito en PHP y lo usa en cada rincón del framework. Si llegas sin conocer el lenguaje, vas a encontrar código que no entiendes y eso te va a frenar. No necesitas ser un experto en PHP para empezar con Laravel, pero sí necesitas tener claras ciertas bases. Este artículo te las explica con ejemplos reales y directos al grano.
Variables y tipos de datos
PHP es un lenguaje de tipado dinámico, lo que significa que no tienes que declarar el tipo de una variable al crearla. El intérprete lo infiere.
<?php
$nombre = "Carlos"; // string
$edad = 28; // integer
$precio = 19.99; // float
$activo = true; // boolean
$nada = null; // null
// Verificar el tipo
var_dump($edad); // int(28)
echo gettype($nombre); // string
En versiones modernas de PHP (8.0+) puedes usar tipos de unión y el tipo mixed:
<?php
function procesar(int|string $valor): void {
echo $valor;
}
Laravel usa PHP 8.1+ y aprovecha todas estas características. Cuanto más cómodo te sientas con los tipos, más fácil te resultará leer el código del framework.
Funciones
Las funciones encapsulan lógica reutilizable. En PHP se declaran con function:
<?php
function saludar(string $nombre): string {
return "Hola, $nombre";
}
echo saludar("Ana"); // Hola, Ana
PHP 7.4 introdujo las arrow functions, una sintaxis más compacta para funciones anónimas de una sola expresión:
<?php
$multiplicar = fn($x, $y) => $x * $y;
echo $multiplicar(3, 4); // 12
Las arrow functions capturan automáticamente las variables del ámbito externo sin necesidad de use:
<?php
$factor = 10;
$escalar = fn($n) => $n * $factor;
echo $escalar(5); // 50
En Laravel las verás constantemente en colecciones y callbacks.
Arrays y funciones esenciales
Los arrays en PHP son estructuras muy versátiles. Pueden ser indexados numéricamente o asociativos (clave-valor):
<?php
// Array indexado
$frutas = ['manzana', 'pera', 'uva'];
// Array asociativo
$usuario = [
'nombre' => 'Luis',
'email' => 'luis@ejemplo.com',
'edad' => 32,
];
echo $usuario['nombre']; // Luis
echo $frutas[0]; // manzana
Las funciones más usadas que encontrarás en código Laravel son:
<?php
$numeros = [1, 2, 3, 4, 5];
// array_map: transforma cada elemento
$dobles = array_map(fn($n) => $n * 2, $numeros);
// [2, 4, 6, 8, 10]
// array_filter: filtra elementos según condición
$pares = array_filter($numeros, fn($n) => $n % 2 === 0);
// [2, 4]
// array_keys: obtiene las claves
$datos = ['nombre' => 'Ana', 'rol' => 'admin'];
$claves = array_keys($datos);
// ['nombre', 'rol']
// array_values: reindexa tras un filter
$resultado = array_values($pares);
// [2, 4]
// in_array: comprueba si un valor existe
if (in_array(3, $numeros)) {
echo "El 3 está en el array";
}
Null coalescing y operadores modernos
El operador ?? es uno de los más útiles en PHP y lo verás por toda la base de código de Laravel:
<?php
$config = ['timeout' => 30];
// Sin null coalescing
$limite = isset($config['limite']) ? $config['limite'] : 60;
// Con null coalescing
$limite = $config['limite'] ?? 60;
// Encadenado
$valor = $a ?? $b ?? $c ?? 'default';
El operador ??= asigna solo si la variable es null:
<?php
$nombre = null;
$nombre ??= 'Invitado';
echo $nombre; // Invitado
Clases y Programación Orientada a Objetos
Laravel es un framework completamente orientado a objetos. Entender POO no es opcional.
Clases y constructores
<?php
class Producto {
public string $nombre;
protected float $precio;
private int $stock;
public function __construct(string $nombre, float $precio, int $stock) {
$this->nombre = $nombre;
$this->precio = $precio;
$this->stock = $stock;
}
public function getPrecio(): float {
return $this->precio;
}
public function hayStock(): bool {
return $this->stock > 0;
}
}
$producto = new Producto('Teclado', 49.99, 10);
echo $producto->nombre; // Teclado
echo $producto->getPrecio(); // 49.99
La visibilidad importa:
public: accesible desde cualquier lugar.protected: accesible desde la clase y sus subclases.private: solo accesible dentro de la propia clase.
Herencia
<?php
class Animal {
public function __construct(protected string $nombre) {}
public function hablar(): string {
return "...";
}
}
class Perro extends Animal {
public function hablar(): string {
return "{$this->nombre} dice: ¡Guau!";
}
}
$perro = new Perro('Rex');
echo $perro->hablar(); // Rex dice: ¡Guau!
En Laravel, tus controladores extienden Controller, tus modelos extienden Model. Heredar comportamiento del framework es la base de todo.
Interfaces
Una interfaz define un contrato: qué métodos debe implementar una clase, sin decir cómo.
<?php
interface Notificable {
public function enviarNotificacion(string $mensaje): bool;
}
class UsuarioEmail implements Notificable {
public function enviarNotificacion(string $mensaje): bool {
// lógica de envío por email
return true;
}
}
class UsuarioSMS implements Notificable {
public function enviarNotificacion(string $mensaje): bool {
// lógica de envío por SMS
return true;
}
}
Laravel usa interfaces en todo su sistema de contratos (Illuminate\Contracts). Cuando inyectas una interfaz en un constructor, el contenedor de servicios resuelve qué implementación usar.
Clases abstractas
Son como las interfaces pero pueden tener implementación parcial:
<?php
abstract class Pago {
abstract public function procesar(float $monto): bool;
public function registrar(float $monto): void {
echo "Registrando pago de $monto euros";
}
}
class PagoTarjeta extends Pago {
public function procesar(float $monto): bool {
// lógica específica de tarjeta
return true;
}
}
Namespaces y use
Los namespaces organizan el código evitando colisiones de nombres. En Laravel cada clase tiene su namespace:
<?php
namespace App\Http\Controllers;
use App\Models\Usuario;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class UsuarioController extends Controller {
public function show(int $id): Response {
$usuario = Usuario::find($id);
return response()->json($usuario);
}
}
La declaración namespace va al principio del archivo. Los use importan clases de otros namespaces para usarlas con su nombre corto. Sin esto tendrías que escribir la ruta completa cada vez: new \App\Models\Usuario().
Type hints y return types
PHP moderno tiene un sistema de tipos robusto. Laravel lo usa intensamente:
<?php
function dividir(int $a, int $b): float {
return $a / $b;
}
// Tipos nullables
function buscarUsuario(int $id): ?Usuario {
return Usuario::find($id); // puede retornar null
}
// Union types (PHP 8.0+)
function formatear(int|float $numero): string {
return number_format($numero, 2);
}
// Tipo de retorno void
function limpiarCache(): void {
cache()->flush();
}
Conclusión
Con estos fundamentos puedes empezar a leer y escribir código Laravel con confianza. No hace falta memorizar todo de golpe: practica con pequeños scripts, comprueba que entiendes cómo funcionan las clases y los namespaces, y cuando abras un controlador de Laravel por primera vez, el código te resultará familiar.
El siguiente paso natural es instalar Composer, el gestor de paquetes que hace posible instalar Laravel con un solo comando.