Crear Código Limpio en PHP
Hay una cantidad bastante grande de herramientas para crear código limpio PHP de hecho la gente tiende a quejarse de que el código no es limpio debido a el código embebido en HTML.
El código embebido en HTML se ve mucho en PHP si, se puede hacer mucho más claro el código separando ambas cosas también, PHP permite hacer estas cosas y la gente tiende a abusar de ello.
PHP ofrece a sus programadores una gran cantidad de herramientas que les permiten hacer código realmente limpio, si así lo desea entre estas herramientas tenemos:
- funciones
- clases
- traits
- Heredoc y Nowdoc
- include, include_once, require, requrie_once and partial parts(components)
- enrutamiento
- composer
- third party templates como puede ser blade.
- MVC architectural design pattern
- Frameworks
- otras
Por lo que tenemos un montón de cosas que podemos hacer para mejorar.
Heredoc
Es una lástima que no se utiliza heredoc nunca he visto a alguien utilizándolo, de hecho la primera vez que use heredoc fue al crear el témplate de este blog
Con PHP podemos hacer algo como lo que sigue:
Y al final de todo esto hacemos un echo
para que quede en pantalla. Veamos un ejemplo más elaborado:
En ele siguiente ejemplo he utilizado Bootstrap para la página de una manera más rápida y que tenga algo de estilo.
Este sera nuestro main.php para que tenga una idea del poder que tenemos con heredoc:
main.php//blastcoding.com <?php //preprocess variables and code $title = "This is my main text"; $main_text ="Phasellus non ornare justo. Duis vulputate ipsum ac malesuada ornare. Nunc faucibus quam vitae gravida efficitur. Quisque quis justo in nunc maximus ultricies. Quisque nec sagittis turpis. Sed ultricies sed lacus et aliquet. Sed dictum pretium neque et facilisis. Praesent eget diam eu odio imperdiet consectetur vitae a leo. In ullamcorper dolor vel fermentum convallis. Donec rhoncus tempus finibus. Aenean lectus lorem, interdum vitae accumsan sit amet, facilisis at augue. Donec suscipit feugiat mi a fermentum. Nam quis felis sit amet est euismod lacinia eu a enim. Sed sed ligula urna."; //template $main =<<<HTML <div class="container"> <div class="row"> <div class="col-8"> <main> <h1>$title</h1> <p> $main_text </p> </main> </div> <div class="col-4"> </div> </div> </div> HTML; //render echo $main;
Puedes ver más de heredoc en https://blastcoding.com/php-heredoc-y-nowdoc/
Invoked immediately functions
Las funciones que corren inmediatamente pueden ser de gran ayuda en PHP, esto me di cuenta al crear el tema de WordPress que se está usando actualmente en el blog. Recordemos el tema anterior de usar Heredoc, ese tema tiene un pequeño problema y es que estamos utilizando variables que talvez puedan pisar otras.
Aquí es donde entra la invoked immediately functions, supongamos que venimos de otra página la cual le pasa los datos como un array a nuestra vista o plantilla como le queramos decir, podemos hacer que una función que corra inmediatamente reciba por parámetro esta data.
Dentro de la función podremos crear variables que hagan el pre-proceso antes de utilizarlas en plantilla
por ejemplo:
Invoked immediately function reciviendo datos$se= "lateral goes here"; (function() use($se){ //preprocess variables and code $title = "This is my main text"; $main_text ="Phasellus non ornare justo. Duis vulputate ipsum ac malesuada ornare. Nunc faucibus quam vitae gravida efficitur. Quisque quis justo in nunc maximus ultricies. Quisque nec sagittis turpis. Sed ultricies sed lacus et aliquet. Sed dictum pretium neque et facilisis. Praesent eget diam eu odio imperdiet consectetur vitae a leo. In ullamcorper dolor vel fermentum convallis. Donec rhoncus tempus finibus. Aenean lectus lorem, interdum vitae accumsan sit amet, facilisis at augue. Donec suscipit feugiat mi a fermentum. Nam quis felis sit amet est euismod lacinia eu a enim. Sed sed ligula urna."; //template $main =<<<HTML <div class="container"> <div class="row"> <div class="col-8"> <main> <h1>$title</h1> <p> $main_text </p> </main> </div> <div class="col-4"> $se </div> </div> </div> HTML; //render echo $main; })();
Por ejemplo, puedes utilizar esto en Codeigniter, esto es más rápido que usar un Template y también es más rápido que entrar a abrir y cerrar PHP como desquiciado.
Componentes(Partial parts)
PHP nos brinda una cantidad de herramientas para incluir código dentro de otro, estas son include
, include_once
, require
, require_once
.
Es buena idea separar tanto header como footer y otras partes de la página para que estas sean más fáciles de abordar.
De esta manera tendremos una carpeta que sea partials, components o parts la cual tendrán fragmentos de la página. Además, que las secciones estén separadas hace que las diferentes partes visuales de nuestro proyecto sean más fáciles de cambiar.
No tiene sentido tener una parte que se repite constantemente, simplemente créala e inclúyela como parte de la view.
Por ejemplo, supongamos que nuestro index.php podria ser de la siguiente manera:
index.php<!doctype html> <html lang="EN"> <head> <?php require_once("partials/head.php"); ?> </head> <body> <?php require_once("partials/header.php"); require_once("partials/main.php"); require_once("partials/footer.php"); require_once("partials/scripts.php"); ?> </body> </html>
Si vemos bien tenemos los fragmentos de código que formaran parte de index en la carpeta partials, de esta manera, por ejemplo, si nos piden que tenemos que tener por ejemplo el header distinto, vamos y modificamos el header.php.
Esto en un proyecto grande sería una vista y no un index.php, en un proyecto grande lo que utilizaríamos sería un patrón de diseño MVC que es lo que veremos a continuación de forma rápida.
Puedes ver más sobre include y require en https://blastcoding.com/include-y-require-en-php/
MVC
Otra forma de hacer nuestro código mas limpio en PHP es utilizar el patrón de diseño MVC.
El patrón de diseño MVC, explicado en simples palabras es una forma de dividir nuestro código en 3 partes la vista que es lo que le mostraremos al usuario, el modelo que se comunicara con nuestra base y el controller que es el que se encargara de llamar a la vista y hacer preprocesos antes de enviar información al modelo.
si quiere verlo de una forma más formal aquí tiene la definición que se nos da en wikipedia:
Modelo-vista-controlador (MVC) es un patrón de arquitectura de software, que separa los datos y principalmente lo que es la lógica de negocio de una aplicación, de su representación y el módulo encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la construcción de tres componentes distintos que son el modelo, la vista y el controlador; es decir: por un lado define componentes para la representación de la información y, por otro lado, para la interacción del usuario.
wikipedia.com
Por lo general en nuestro proyecto estará dividido en 3 carpetas que serán las principales, un index.php y utilizaremos composer para utilizar autoload para simplificar las cosas.
También dentro del MVC podríamos tener encuentra un enrutamiento dentro del archivo index.php
La estructura de un MVC moderno generalmente será tal cual la imagen anterior, el enrutamiento desde index.php se utiliza en muchos frameworks, Laravel, Codeigniter, otros e incluso en CMS como WordPress.
Por lo general, lo principal para empezar a hacer un proyecto MVC desde cero será
- src(non public folder)
- models
- users.php(class)
- products.php(class)
- views
- components(partials)
- user.php
- register.php
- login.php
- products.php
- controllers
- UserController.php(class)
- ProductController.php(class)
- index.php(silence)
- models
- public(the public folder)
- vendor
- composer.json
- index.php(enrutamiento)
En general nuestro proyecto estaría conformado algo parecido a lo anterior expuesto
Frameworks
Actualmente, Utilizaríamos algún framework de PHP para simplificar el proceso de hacer un MVC desde 0, algunos de los frameworks que podrías utilizar son Laravel, Symfony, CodeIgniter, CakePHP, otros.
Laravel es el framework más popular hoy día siguiéndolo Codeigniter de cerca, Symfony es un framework que puedes llegar a utilizar en webs grandes.
Yii2 es otro buen framework que podrías utilizar
Conclusión de Código limpio en PHP
En conclusión podemos sacar que tenemos bastantes formas de hacer que nuestro código sea mas limpio en PHP.
- El patrón de diseño MVC nos ofrece una manera importante de separar la parte lógica de lo visual. En este post no vimos como crear los controladores y models porque dependerá del framework que usted utilice o si usted crea desde 0
- Heredoc es una herramienta bastante útil para separar nuestro PHP del código HTML
- Separar nuestras vistas en varios componentes hace que el código sea más fácil de manejar, de esta manera podremos modificar partes de las vistas sin que estas sean un dolor de cabeza
- El uso de Composer y de su autoload es casi que obligatorio, hoy día de esta manera podremos utilizar de forma mejor el MVC.
- Laravel es el framework más popular hoy en día
Como puede ver en nuestro heredoc utilizamos el término
<<<HTML
en su inicio yHTML;
en su final aunque el nombre que le demos no debería hacer la gran diferencia si la hace en el IDE por ejemplo yo utilizo visual studio code cuando usamos el close tag y end tag con nombre HTML este ide trata como si fuera HTML y, por tanto, colorea toda la sintaxis HTML excepto las variables PHP