PHP es, además, un framework

Conversando con un amigo nos preguntábamos si PHP es un framework, en principio, para hacer webs. Y me quedó la idea en mente pues es precisamente el framework que simplifica el trabajo de hacer una web en C++ y tener que construir un CGI, pues no solo te lo facilita y te da las herramientas, sino que te da un marco de trabajo al cual tienes que ajustarte.

Si vemos la definición formal:

En la programación de computadoras, un marco de software es una abstracción en la que el software que proporciona una funcionalidad genérica se puede cambiar de forma selectiva mediante un código adicional escrito por el usuario, lo que proporciona un software específico de la aplicación. Un marco de software proporciona una forma estándar de crear e implementar aplicaciones. Un marco de software es un entorno de software universal y reutilizable que proporciona una funcionalidad particular como parte de una plataforma de software más grande para facilitar el desarrollo de aplicaciones, productos y soluciones de software. Los marcos de software pueden incluir programas de soporte, compiladores, bibliotecas de códigos, conjuntos de herramientas e interfaces de programación de aplicaciones (API) que reúnen a todos los diferentes componentes para permitir el desarrollo de un proyecto o sistema.

Donde dice “como parte de una plataforma de software más grande“, para mí sería precisamente el C++ y no tener que hacer un CGI.

Desde que Rasmus hizo su primer CGI en C en 1994, era una evolución lógica el no tener que hacer un CGI para cada web que hiciera falta, puesto que toda web tenía un conjunto de cuestiones similares a resolver. Y tanto se logró que hasta lo puedes extender, hacer extensiones de PHP en C++.

Java, Python, Ruby, entre otros, no son del mismo origen, son lenguajes de próposito general y no son frameworks. Por eso existe un Ruby on Rails, un Django, y un JSF. Sin embargo son plataformas, porque lo que hagas en uno de ellos depende de que ellos estén funcionando también.

Los frameworks del framework php

Hace unos días dije en el chat de la Comunidad de PHP de Cuba la frase “los frameworks del framework php”. Y buscando en internet para indagar en el tema, encontré que alguien habló del mismo asunto en 2008. Y a decir del PHP actual que es mucho mejor que el de ese entonces, pues más razón tiene el artículo en SitePoint,  cuando especifican que “PHP es la capa web sin el equipaje del framework”.

Un poco más en profundidad pueden verlo cuando dicen en otro artículo encontrado“PHP es un framework web disfrazado de lenguaje”. Podrás encontrar varias discusiones al respecto.

Algunos no están de acuerdo y usan la justificación de que un framework define un flujo y tienes que adaptarte a él y PHP te deja hacer lo que quieraspor ejemplo, construir frameworks. Lo cual no dice que PHP no sea un framework.

Es decir, para algunos PHP no es un framework web porque es muy flexible. Pero lo cierto es que con cualquier framework web puede hacer lo que quieras también. Ningún framework PHP te prohíbe en cualquier momento salirte de él y terminar en PHP puro; no tiene como obligarte, ni tampoco puede evitar que utilicen el framework de forma inadecuada y que los programadores logren el resultado que quieren. Sencillamente es un acuerdo: si haces esto así, funcionará así.

Cuando escuchan que “php es un framework” tratan de ver si tiene las características de los frameworks de PHP y claro que no las tiene. Los frameworks son escritos en PHP y usan el marco de trabajo de PHP para hacer web y lo mejoran creando uno más robusto y/o automatizando tareas repetitivas. Yii, Symfony, Laravel, son ese ejemplo. Mientras Prestashop, Drupal, y otros, son frameworks escritos en PHP con un propósito específico.

PHP no está al nivel de lenguajes como C++, Objetive C, Java o Python. PHP es un lenguaje, plataforma, aplicación y framework al mismo tiempo; tiene ese polimorfismo.

PHP tampoco está al nivel de Laravel, Symfony, Yii, etc.

Lo que pasa es que PHP no es un framework como Laravel, es la plataforma que necesita Laravel para funcionar y está obligado a usar el marco de trabajo de PHP y no solo su lenguaje.

Los frameworks de PHP te dan código generado y una arquitectura preestablecida. Te ahorran tener que escribir y te disciplinan. Pero si sabes programar bien, diseñar bien, sabes orientación a objetos y demás cuestiones de ingeniería de software, entonces, es muy probable que lo único que necesitas sea sentarte a teclear en PHP, y lo que hacen los “frameworks PHP” es darte eso, un código pre hecho, y darte un diseño y arquitectura donde mucha comunidad se centre en producir con ella.

Eso no está mal, es algo bueno, y como todo, tiene cosas positivas y negativas, que podrás encontrar en internet. A decir de Rasmus, “todo el mundo necesita un framework, pero no todos necesitan un framework de propósito general.” Por eso todos los frameworks de proposito general necesitan de PHP, pero PHP no es un framework de propósito general, es un framework web.

¿Por qué algunos se hicieron famosos como Symfony y Laravel? Hicieron lo mismo que Rasmus, evitar tener que hacer lo mismo cada vez que iban a construir una web, trazaron una disciplina mediante el diseño y porque había un mercado esperando por ellos.

Y al final Rasmus hizo lo mismo que otras personas hicieron antes que él, y así ha sido casi toda la historia de la programación de desarrollo: reutilizar, mejorar diseños, mejorar arquitecturas, mejorar patrones, etc.

Arquitectura basada en capas

Estamos hablando de una arquitectura basada en capas, y por ejemplo Yii es una capa más encima de PHP, y si haces un CMS en Yii será otra capa más. Cosa similar ocurre en Linux: núcleo, X, GTK, GENOME, y subiendo. Es decir, puedes construir un framework con Yii, una capa más, y llamarle Yii++ 😅😅

Con PHP realmente no puedes hacer cualquier cosa, no como lo haces con C++. PHP te permite construir cualquier arquitectura, diseño, implementar patrones, para hacer una web. PHP está hecho en principios para la web aunque puedes hacer otras cosas CLI, servicios y atrevimientos como php-gtk

Hay una pequeña diferencia: framework es marco de trabajo, mientras que plataforma es donde corre una aplicación de software. En ese sentido PHP es lenguaje, plataforma, aplicación y framework al mismo tiempo.

¿Tiene PHP un flujo al cual tienes que adaptarte? Básicamente ejecutar scripts que serán llamados con requests del servidor web (dejemos a un lado Reactphp y Amp, que son frameworks en sí mismos).

MVC digamos que es el flujo más conocido, y casi que en web sites, todo es MVC, de alguna manera terminas en ello, pero no me atrevo a absolutizar. PHP no define el MVC, no el que se conoce, y no tiene porque hacerlo y no te obliga a ello. MVC es un patrón de diseño, pero no tiene porque ser el único.

Pero de cierta manera utilizar PHP significa usar un MVC, donde la vista es la web que se presenta (el HTML, CSS, y JS) de lado del cliente, el modelo una base de datos cualquiera y algun tipo de conexión hacia ella y el control es el propio PHP. Cuando te pones a ver, Yii, Symfony, Laravel definen eso de una manera “elegante”.

Con PHP puedes implementar un MVC más esquisito sin la necesidad de usar una librería dedicada. Es la idea de los frameworks. Traen una estructura ya definida. Pero digamos que PHP es un framework muy flexible, y que entonces pudes escribir una “guía de buenas practicas para hacer una web elegante“, como puede ser implementar correctamente un patrón MVC en él.

Los frameworks PHP son frameworks que corren sobre la plataforma llamada PHP y se ajustan al marco de trabajo de PHP.

Por ejemplo, si vas a hacer una tienda virtual, lo puedes hacer con Yii, pero si usas Prestashop te puede ir mejor, porque es un framework dedicado a eso. Y Prestashop es un buen ejemplo de framework que no es de próposito general, sino un proposito biene específico. Y realiza una función y la realiza bien.

PHP es un framework digamos demasiado general, y tiene características restrictivas y un flujo del cual no te puedes salir, tiene una arquitectura aunque no lo creas, sobre la cual los llamados frameworks PHP implementan la suya. Entonces si subes a un nivel más arriba encuentras frameworks que se van especializando, como es el caso de Drupal, que es un framework de gestión de contenidos.

En ese sentido entenderás que PHP te da la arquitectura, diseño, marco de trabajo, lenguaje y librerias para que desarrolles web y otros frameworks.

Laravel te da un concepto similar, lo que pasa es que Laravel está hecho en PHP, pero puedes hacer un Laravel en Java si quieres, e implementar los mismos conceptos, ese mismo flujo al cual debes adaptarte, y sigues entonces parado encima de Laravel y usando su marco de trabajo.

Inversión de Dependencias

La idea básica de un framework es la Inversión de Dependencias: pones tu código en lugares determinados y el framework lo ejecuta en el momento necesario. Con PHP puedes hacerlo.

En el caso de Phalcon PHP Framework no está escrito en PHP, aparece como una extensión (binario compilado) y sin embargo es un framework PHP.

¿Es PHP un framework demasiado flexible? ¿Flexible para qué? No es demasiado flexible para abstraerte de todo el trabajo de un CGI pero si lo es para hacer cualquier aplicación web. Para eso existen los demás frameworks y por ello si no eres muy disciplinado, haz una de estas dos cosas, o las dos:

  1. Usa una buena guía para que hagas algo decente en PHP
  2. Usar uno de los frameworks PHP del mercado que más se ajuste a tus necesidades.

Por eso incluí la palabra “además” cuando digo que “PHP es, además, un framework“, escrito en C++ que implementa un CGI básicamente y automatiza tareas repetitivas que tienen que ver con eso, y el marco de trabajo que nos da es precisamente para desarrollar este tipo de aplicaciones.

Es muy flexible y te permite implementar cualquier patrón de diseño, por ejemplo MVC, pero no te obliga a ello.

Encima de PHP se han desarrollado otros frameworks que tienen que ajustarse y adaptarse al marco de trabajo PHP y son con objetivos más especificos y que intentan disciplinar el desarrollo de aplicaciones y ganar en productividad mediante la inversión de dependencias.

PHP lo es todo en una sola pieza de software

El framework PHP no es como Laravel, Yii, Drupal, ni pretende serlo, poque es precisamente el lenguaje donde están ellos escritos, es la plataforma donde ellos corren, es la aplicación que le da ciertas funcionalidades y es el marco de trabajo especifico al cual deben ajustarse.

Si haces un programa en C++ y lo compilas para un sistema operativo específico, se ejecutará sobre ese sistema, el cual es su plataforma, C++ es el lenguaje y no hubo framework, porque estamos hablando dentro del universo del sistema operativo y el hardware. Y cuando hablas de Laravel, Yii, Symfony y otros, estás hablando de un framework, no de un lenguaje, ni de una plataforma en este ejemplo.

Python por ejemplo es un lenguaje, y una plataforma, pero no es un framework. Java es un lenguaje, y cuando entras en el mundo Java encuentras, plataforma, framework y aplicaciones. C++ es un lenguaje, pero no es ni una plataforma, ni una aplicación, ni un framework.

Entonces, el sentido común te dirá, que dependiendo del problema, te debes parar sobre una plataforma y usar un framework conveniente para resolver tu problema.

Tags
Join us on Telegram

@phpcuba

¿Cuál framework prefieres?

Choices