¿Funcional o POO en PHP: qué elegir en 2024?

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Dos mundos en un mismo lenguaje: ¿por qué es importante?

\n

Cuando hablamos de PHP, inmediatamente viene a la mente el clásico enfoque orientado a objetos (POO). Clases, herencia, encapsulamiento: esa es la base que se enseña en todos los cursos. Pero hay otra cara de la moneda: el enfoque funcional. ¿Y sabes qué? PHP sabe hacer ambas cosas, y muy bien.

\n

En este artículo no vamos a discutir cuál es mejor. Analizaremos cuándo y qué enfoque usar para que tu código no solo sea bonito, sino también rápido. Si programas en PHP y quieres ir más allá de "simplemente funciona", este artículo es para ti.

\n\n

PHP orientado a objetos: un clásico que nunca pasa de moda

\n

La POO en PHP se trata de estructura y reutilización. Creas clases que describen las entidades de tu aplicación: usuario, pedido, producto. Cada clase es responsable de su propia área.

\n\n

Ejemplo: trabajar con un usuario mediante POO

\n

Veamos un ejemplo típico. Supongamos que necesitamos crear un usuario y enviarle un correo de bienvenida.

\n
<?php\nclass User {\n    private string $name;\n    private string $email;\n\n    public function __construct(string $name, string $email) {\n        $this->name = $name;\n        $this->email = $email;\n    }\n\n    public function sendWelcomeEmail(): void {\n        $subject = "¡Bienvenido, {$this->name}!";\n        $message = "Hola, {$this->name}. Nos alegra verte en nuestro sitio.";\n        mail($this->email, $subject, $message);\n    }\n\n    public function getName(): string {\n        return $this->name;\n    }\n}\n\n$user = new User("Iván", "ivan@example.com");\n$user->sendWelcomeEmail();\necho "Correo enviado al usuario: " . $user->getName();\n?>
\n

Aquí todo es lógico: los datos (nombre, email) y los métodos (enviar correo) están en un mismo lugar. Esto es práctico cuando tienes muchas operaciones diferentes con una misma entidad.

\n\n

Ventajas de la POO en PHP

\n
    \n
  • Legibilidad: el código está dividido en bloques lógicos, es fácil encontrar el método necesario.
  • \n
  • Herencia: puedes crear una clase base y extenderla.
  • \n
  • Encapsulamiento: los datos están protegidos contra cambios accidentales (private/protected).
  • \n
  • Polimorfismo: una misma interfaz, diferentes implementaciones.
  • \n
\n\n

Desventajas de la POO

\n
    \n
  • Redundancia: para una tarea simple (por ejemplo, formatear una cadena), escribir una clase es excesivo.
  • \n
  • Estado: los objetos almacenan estado, lo que puede provocar errores si no se controlan las mutaciones.
  • \n
  • Memoria: cada objeto ocupa más memoria que una función simple.
  • \n
\n\n

PHP funcional: minimalismo y pureza

\n

La programación funcional en PHP no es solo "escribir una función". Es una filosofía donde las funciones son las protagonistas. No tienen efectos secundarios, no modifican el estado global y siempre devuelven un resultado predecible.

\n\n

Ejemplo: la misma tarea, pero de forma funcional

\n

Resolvamos la misma tarea —crear un usuario y enviar un correo— pero sin clases.

\n
<?php\nfunction createUser(string $name, string $email): array {\n    return ['name' => $name, 'email' => $email];\n}\n\nfunction sendWelcomeEmail(array $user): void {\n    $subject = "¡Bienvenido, {$user['name']}!";\n    $message = "Hola, {$user['name']}. Nos alegra verte en nuestro sitio.";\n    mail($user['email'], $subject, $message);\n}\n\nfunction getUserName(array $user): string {\n    return $user['name'];\n}\n\n$user = createUser("Iván", "ivan@example.com");\nsendWelcomeEmail($user);\necho "Correo enviado al usuario: " . getUserName($user);\n?>
\n

¿Se ve más simple? Sí. Pero aquí no hay encapsulamiento: los datos son solo un array. Sin embargo, cada función hace una sola acción y no sabe nada sobre el "mundo exterior".

\n\n

Funcional avanzado

Blogs

Book Recommendations