PHP: El Lenguaje Web Moderno

Domina PHP moderno con Laravel, Composer y las mejores prácticas actuales


PHP: El Lenguaje Web Moderno
1 Cargando...

PHP: El Lenguaje Web Moderno

PHP sigue siendo uno de los lenguajes más utilizados en la web, alimentando aproximadamente el 77% de todos los sitios, incluyendo WordPress, Facebook y Wikipedia. Con PHP 8.x, el lenguaje experimentó una transformación significativa, incorporando características modernas como tipado fuerte, compilación JIT y atributos.

Mito desmentido: El PHP moderno es completamente diferente del PHP legado. Con frameworks como Laravel y Symfony, PHP rivaliza con cualquier stack moderno en productividad y elegancia.

Características de PHP 8.x

  1. JIT Compilation - Rendimiento significativamente mejorado
  2. Named Arguments - Argumentos nombrados para claridad
  3. Attributes - Metadatos nativos (como anotaciones)
  4. Match Expression - Switch más poderoso
  5. Constructor Promotion - Clases más concisas
  6. Union Types - Múltiples tipos permitidos
  7. Nullsafe Operator - ?-> para encadenamiento seguro

Fundamentos Modernos

Tipos y Variables

<?php

declare(strict_types=1);

// Tipos escalares
$nombre = 'María';         // string
$edad = 25;                // int
$altura = 1.68;            // float
$activo = true;            // bool

// Arrays
$frutas = ['manzana', 'banana', 'naranja'];
$usuario = [
    'nombre' => 'María',
    'email' => '[email protected]',
    'edad' => 25
];

// Array destructuring
['nombre' => $nombre, 'email' => $email] = $usuario;

// Spread operator
$numeros = [1, 2, 3];
$masNumeros = [...$numeros, 4, 5, 6];

// Null coalescing
$valor = $usuario['telefono'] ?? 'No proporcionado';

// Nullsafe operator (PHP 8.0+)
$ciudad = $usuario?->direccion?->ciudad;

Clases Modernas

<?php

declare(strict_types=1);

// Constructor promotion (PHP 8.0+)
class Usuario
{
    public function __construct(
        public readonly int $id,
        public string $nombre,
        public string $email,
        public bool $activo = true,
        public ?\DateTimeImmutable $creadoEn = null
    ) {
        $this->creadoEn ??= new \DateTimeImmutable();
    }
    
    public function saludar(): string
    {
        return "¡Hola, {$this->nombre}!";
    }
    
    public function desactivar(): void
    {
        $this->activo = false;
    }
}

// Enums (PHP 8.1+)
enum Estado: string
{
    case Pendiente = 'pendiente';
    case Aprobado = 'aprobado';
    case Rechazado = 'rechazado';
    
    public function etiqueta(): string
    {
        return match($this) {
            self::Pendiente => 'Esperando revisión',
            self::Aprobado => 'Aprobado ✓',
            self::Rechazado => 'Rechazado ✗',
        };
    }
}

// Readonly classes (PHP 8.2+)
readonly class Producto
{
    public function __construct(
        public string $nombre,
        public float $precio,
        public int $cantidad
    ) {}
    
    public function valorTotal(): float
    {
        return $this->precio * $this->cantidad;
    }
}

Laravel Moderno

<?php

// Controller con Route::resource
class ProductoController extends Controller
{
    public function __construct(
        private ProductoService $service
    ) {}
    
    public function index(): JsonResponse
    {
        return response()->json(
            $this->service->listar()
        );
    }
    
    public function store(ProductoRequest $request): JsonResponse
    {
        $producto = $this->service->crear($request->validated());
        
        return response()->json($producto, 201);
    }
    
    public function show(Producto $producto): JsonResponse
    {
        return response()->json($producto->load('categoria'));
    }
}

// Eloquent Model
class Producto extends Model
{
    protected $fillable = ['nombre', 'precio', 'categoria_id'];
    
    protected $casts = [
        'precio' => 'decimal:2',
        'activo' => 'boolean',
    ];
    
    public function categoria(): BelongsTo
    {
        return $this->belongsTo(Categoria::class);
    }
    
    public function scopeActivos(Builder $query): Builder
    {
        return $query->where('activo', true);
    }
}

// Query Builder fluido
$productos = Producto::query()
    ->activos()
    ->where('precio', '>=', 500)
    ->with('categoria')
    ->orderBy('precio', 'desc')
    ->paginate(20);

Herramientas Esenciales

HerramientaPropósito
ComposerGestor de dependencias
LaravelFramework full-stack
SymfonyFramework enterprise
PHPUnitTests unitarios
PHPStanAnálisis estático
PestTests elegantes

Lista de Verificación de Aprendizaje

  • Dominar características de PHP 8.x
  • Entender Composer y autoloading
  • Aprender Laravel o Symfony
  • Estudiar patrones de diseño
  • Practicar tests con PHPUnit/Pest
  • Explorar APIs REST con Laravel
  • Implementar autenticación y autorización

Recursos Esenciales

Cita

“El PHP moderno no tiene nada que ver con el PHP del que puedas haber oído hablar. Es un lenguaje maduro, tipado y de alto rendimiento.” - Taylor Otwell


¡PHP sigue evolucionando y se mantiene como una excelente opción para desarrollo web!