13 trucos y consejos de PHP que pueden hacerte la vida (profesional) más fácil

PHP tiene bastante mala prensa. En las conferencias no hay comunicante que desee ser cool que no lance su pullita cara PHP y los phperos. Y la verdad es que las múltiples crueldades que los desarrolladores de PHP cometen (cometemos) engallados por su flexibilidad y sencillez tienen una buena parte de culpa. No obstante si lleva tantos años siendo el lenguaje más usado para el desarrollo web, por algo va a ser. En las próximas líneas te vamos a dar ciertos trucos, consejos y buenas practicas (trece específicamente) de PHP a fin de que tu código sea mejor, tu vida profesional más agradable y puedas ir a los congresos de desarrolladores con la cabeza alta y sin ocultar el elefante. Hey ho, let's go!

Disclaimer: los snippets de código utilizados en el presente artículo son orientativos. Usalos bajo tu rigurosa responsabilidad.

Desarrolla con el reporting de fallos activado

Uno de las grandes némesis de los desarrolladores web por lo general y los phperos particularmente es el pantallazo blanco de la muerte. Un fallo quinientos que no da ninguna información y que puede resultar formidablemente frustrante. Para evitarlo, sin alterar el archivo php.ini, a lo largo de la fase de desarrollo tan solo es preciso incluir las 2 siguientes líneas al comienzo del código:

Esto te dejará ver tanto los fallos fatales que generan el temido pantallazo blanco como warnings o bien notices que pueden ser bugs a reparar. Entonces, claro está, no se te olvide quitarlas al subir a producción.

Evita la inyección SQL

Probablemente una de las causas de la mala prensa de PHP sean los orificios de seguridad (Cross-Site Scripting, Cross-Site Request Forgeries…) que se te pueden colar cuando no seas un tanto minucioso. De todos el más conocido (y el más fácil de prevenir) es el de la SQL Injection: la inserción de código SQL invasor con la intención de trastocar el funcionamiento normal del programa y conseguir que se ejecute la porción de código invasor en la base de datos con aciagas consecuencias.

¿De qué manera lo eludimos? Hay múltiples formas mas la más fácil es escapando siempre y en todo momento cualquier variable (y no solo los inputs del usuario) que vayamos a emplear contra la base de datos. Tal que así:

¿De qué forma? ¿Utilizando el obsoleto driver de MySQL en lugar de MySQLi o bien PDO? ¿Y haciendo las consultas a pelo? Calma, no adelantemos sucesos de otros trucos y consejos que van a venir a posteriori.

Jubila el driver mysql

No estamos en dos mil cinco ni proseguimos utilizando PHP4 (o bien cuando menos eso espero) con lo que ya nos podemos deshacer del driver mysql para conectar con, mira tu por donde, MySQL. Podemos apostar por el driver mysqli (sobretodo en su forma orientada a objetos) o bien, mejor todavía, caer en los corpulentos brazos de PDO.

PDO, acrónimo de PHP Data Object, es una extensión de PHP que da una capa de abstracción para la conexión con diferentes gestores de bases de datos (por el hecho de que en PHP asimismo puedes trabajar contra otras bases de datos que no sean MySQL si bien en ocasiones no lo parezca). Vamos, salvando las distancias puede compararse a Hibernate de Java (que me disculpen los javeros si digo alguna incoherencia) y su empleo es tan fácil como el que te mostramos a continuación:

Eso sí, recuerda tener instalada y activa la extensión y desempolva tus apuntes de POO.

Fuente: xkcd (https://xkcd.com/327/)

Abraza cURL

Vale, cuando precisas recobrar un archivo de otro servidor, archivo _ get _ contents() es potente, fácil de usar y te saca del apuro mas no tienes nada de control sobre lo que sucede y la flexibilidad asimismo es escasa. Vamos, es como tener a Drenthe en tu equipo. De ahí que mejor tirar de la popular extensión cURL (asegurate de tenerla instalada y activada ya antes de emplearla): más potente, flexible y con decenas y decenas de opciones. Un caso de empleo de cURL puede ser tan fácil como el siguiente:

Abres una conexión con una url a lo largo de un tiempo determinado y recobras el contenido de exactamente la misma aparte del status de la operación y sin olvidar cerrarla. Entonces las opciones que tienes para complicarlo todo son enormes, claro (cabeceras, factores por POST, autentificación, diferentes outputs, conexiones FTP, conexiones SSH, encriptación…).

[Bola extra] Si cURL se te queda corto siempre y en todo momento puedes tirar de librerías como GuzzleHTTP.

Usa las funciones _once() con precaución

En el momento de llamar a otros archivos, librerías o bien clases podemos decantarse por la función include() o bien la función require(). La primera da un warning de no localizar el archivo y prosigue la ejecución. La segunda da un fallo fatal y para la ejecución. Bien, hasta acá todo claro, PHP ciento uno de manual.

No obstante asimismo tenemos la opción de usar las funciones include _ once() y require _ once(), que tienen exactamente la misma funcionalidad mas evitan que los archivos, clases o bien librerías cargados puedan cargarse nuevamente ocasionando duplicidades y estados no deseados en el código. Esto está excelente a priori mas lo logran a costa de una minoración de desempeño bastante concida. Por ende prácticamente mejor ocuparte tu mismo, toda vez que puedas, de eludir estas duplicidades examinando bien el código y todas y cada una de las llamadas en exactamente el mismo.

Aprende a manejar los operadores ternarios

Los operadores ternarios son una buena opción alternativa a las construcciones IF simples: en una misma línea tienes el condicional y los resultados del TRUE y el FALSE. ¿Mande? Hete aquí un ejemplo:

La variable va a tener el valor del factor GET y de no haberlo, va a tener el textual John. Si eres disléxico o bien sencillamente algo distraído lo mismo te cuesta un tanto esto de los operadores ternarios mas a cambio tu código va a ser más ligero. Ah, y se pueden anidar sin inconveniente.

Usa un Switch en lugar de encadenar Ifs a lo loco

Proseguimos nuestra lucha contra utilizar las construcciones If para todo. Switch es sutilmente más veloz que If mas dejando a un lado el tema desempeño, resulta terrible ver esa cantidad impúdica de if-elseif-else encadenados que hacen ininteligibles ciertos códigos. Utiliza Switch, que para eso PHP es un lenguaje moderno y trae esta construcción, carallo.

Y en tanto que estamos, un truco para los Switch: pon ya antes los casos que estimes que serán más utilizados, el desempeño va a ser aún mejor. Ejemplo:

Usa comillas simples en lugar de dobles

Esto puede parecer una perogrullada mas emplear comillas simples ('') en lugar de dobles () es el doble de veloz. Esto es que toda vez que puedas tira de comillas simples. El desempeño de tu servidor te lo agradecerá.

URLs limpias de forma veloz con .htaccess

Las urls que produce PHP pueden ser un genuino desastre. Soluciones para lograr urls más limpias y afables tanto para el ojo humano para el posicionamiento web existen muchas mas pocas tan veloces y fáciles como piratear el archivo .htaccess.

El .htaccess es un archivo escondo con directivas de Apache que sirve para un sinnúmero de cosas (acá un tutorial bastante extenso y pormenorizado), entre ellas efectuar redirecciones… y las urls limpias no dejan de ser redirecciones al fin y a la postre. ¿Un caso?

Con estas 2 simples líneas de código logras que una terrible url como tuweb.com/index.php?page=contacto sea alcanzable por medio de la considerablemente más afable tuweb.com/contacto. Si eres ducho con las expresiones regulares, puedes lograr genuinas florituras.

PHP encripta tus contraseñas por ti

Desde PHP cincuenta y cinco. (y de cincuenta y tres con una librería opción alternativa) da encriptación nativa para las contraseñas que desees guardar en base de datos de una manera tan fácil como:

¿Y examinar si la contraseña es adecuada? Igualmente sencillo:

Adiós líos y calentamientos de cabeza con sha1() o bien md5().

Se siendo consciente de la problemática de isset()

Otro de los inconvenientes que le dan la mala fama a PHP es que hay funciones que no hacen precisamente lo que su nombre señala. Es el caso de, por servirnos de un ejemplo, isset(). Aparte de cuando la variable no existe, isset() devuelve False si el valor de la variable es NULL. Sí, como lo lees.

En consecuencia, si NULL puede ser un valor válido de la variable, tenemos un problema:

¿Solución? Prácticamente que mejor tiramos de get _ defined _ vars() y array _ key _ exists():

Pasa variables por referencia

Lo de las variables por referencia no es solo para Java y demás lenguajes compilados, en PHP asimismo puedes pasar los factores por referencia a una función y de esta forma esta va a poder actualizar su valor sin precisar devolver nada o bien declarar complicadas y desmemoriadas variables globales. Tan simple como anteponer un ampersand (