Un objetivo al que casi todos los ingenieros de software del mundo, independientemente de la disciplina o el idioma al que se suscriban, tiene un objetivo común en mente. Esto es para mantener las cosas SECAS. Cuando decimos DRY, no estamos hablando del tipo de DRY del desierto de Mojave, estamos hablando de Do Not Repeat Yourself. Hmmm, espera, ¿no es eso DNRY? Ok, digamos que no se repita. Entiendes la idea. Vaya, hubo una repetición allí mismo, ¡mira, todos debemos hacer un esfuerzo para mantenerlo SECO! En este punto del juego, tenemos todo tipo de cargadores automáticos, el maravilloso Composer Project e innumerables marcos que se esfuerzan por ayudarnos a organizar y mantener algún tipo de arquitectura sensible que facilite mantener su código SECO. En este episodio de la aventura del tutorial de PHP, veremos las funciones brillantes que los creadores de PHP idearon desde el principio para ayudarnos con este objetivo, y esas serían las funciones include, require, include_once y require_once. Sí, es probable que ya los haya usado, pero vale la pena profundizar más para asegurarse de que entendemos los puntos clave y las diferencias de cada enfoque. Saltemos.


Mantenlo SECO

Una de las grandes características de PHP es la capacidad de incluir código de otros archivos en otros archivos PHP. Ok, gran whoop, probablemente estés pensando. Puede que tenga razón, pero esta es una característica importante porque es al utilizar este enfoque que nacen las bases de la organización y reutilización del código. Mantengamos lo básico en este momento. Olvídese de los frameworks, Composer y cualquier otro método avanzado que ya esté utilizando. Vamos a volver al estilo basado en funciones procedimentales ahora mismo. Imagina que tienes una página en tu sitio web y acabas de crear una función asesina que procesa de manera increíble los datos con los que estás trabajando. Ahora, dos meses después, en una sección completamente diferente del sitio web y del código base, tienes la necesidad de procesar esos datos de la misma manera que lo hizo tu función asesina original. ¿Vas a escribir esa función de nuevo? Podrías hacerlo, si estás empezando, como todos lo hemos hecho. Sin embargo, una mejor manera sería incluir o requerir un archivo que contenga elcódigo de función al que le gustaría acceder. Quizás tu función tenga 30 líneas. En este nuevo archivo, puede incluir el archivo en una línea y luego llamarlo en la siguiente, por así decirlo. 2 líneas frente a 32 líneas es un buen retorno de la inversión. No solo la falta de mecanografía es un factor motivador, sino que pasa si encuentras un error en tu función súper asombrosa unos meses después. Digamos que pegó ese código de función en diez archivos PHP diferentes dentro de su sitio web. Adivina qué, Johnny, abre tu editor favorito y prepárate para un mantenimiento de código que te adormece la mente porque ahora tendrás que corregir ese error en 10 lugares diferentes. ¿Sabes qué, Funk That ? Vamos a asegurarnos de que eso no vuelva a suceder usando las técnicas aquí.


1. incluir ( $path)

Hay una cosa que aún no mencionamos sobre esta fantástica función. Esta útil función no es solo para incluir código PHP, puede colocar lo que quiera en el archivo que se incluirá, como HTML. Imagina que tu increíble página hace uso de algunos elementos comunes en la sección de encabezado, y tienes 10 páginas diferentes que usan los mismos datos de encabezado. ¡No necesitas reinventar la rueda cada vez! Veamos cómo funciona esto.

yourawesomepage.php

Ahora, en lugar de escribir manualmente todos esos datos en la sección del encabezado en todas sus otras páginas, creemos un DRY Maker e incluyémoslo en su lugar.

the_dry_maker.php

Ahora, cuando crees tu otra página increíble, puedes hacerlo con estilo y gracia como tal.

Tenga en cuenta que el archivo Dry Maker ni siquiera tiene PHP. Simplemente estamos usando PHP en el archivo includer para incluir texto que no sea PHP del archivo includee. Lo que esto significa es que cuando se ejecuta la función de inclusión, PHP básicamente se apaga dentro de ella para que pueda importar datos que no sean PHP. Esto también trae a colación el punto de que si desea incluir PHP desde el otro archivo, deberá asegurarse de que está volviendo a activar PHP en ese archivo. Veamos esto incluyendo una función de ejemplo.

yourawesomepage.php

the_dry_maker.php

Manteniéndolo SECO desde hace mucho tiempo. © ® ™
¿Sabes qué Jim? ¡Eres increíble, dame cinco!

¡Agradable! Ahora puede incluir el archivo The Dry Maker en cualquier página de su sitio web y darle un máximo de cinco a cualquiera que desee, sin necesidad de escribir una nueva función cada vez. Ahora mismo, es posible que solo estés dando un máximo de cinco, pero ¿qué sucede una vez que comienzas a salvar el mundo? Ahora puede comenzar a ver el poder de la función de inclusión.


2. require ( $path)

Cuando miramos require vs include, puede parecer que son básicamente lo mismo. De hecho, PHP require y PHP include hacen todas las mismas cosas, excepto con la siguiente diferencia. Si require no puede encontrar el archivo que desea cargar, PHP generará un error fatal y el script se detendrá en seco. En algunos casos, esto puede tener sentido, pero en otros, no tanto. En el ejemplo anterior, el uso de incluir tiene sentido. Es genial chocar los cinco, pero probablemente no sea una misión crítica para nuestra aplicación. Por lo tanto, si no incluimos el archivo The Dry Maker, la página seguirá intentando terminar de ejecutarse. Ahora, dado que intentamos llamar a una función en la página que hace referencia a una definición de función de otro archivo que ahora no está incluido, obtendremos un error de eso. Sin embargo, el punto clave es que la inclusión en sí misma no provocará una falla.database_funcs.phpEste es un fragmento de código importante, tanto que su sitio no podría funcionar sin él. En este caso, require tiene sentido. Veamos esto en acción, cambiaremos el código en yourawesomepage.php para que tenga un error tipográfico en el archivo que estamos buscando. Luego, probaremos el require vs include y veremos qué sucede.

exigir

  • (!) Advertencia: require (tthe_dry_maker.php): no se pudo abrir la secuencia: No existe tal archivo o directorio en C: wampwwwbootstrapsandboxyourawesomepage.php en la línea 16
  • (!) Error fatal: require (): Falló la apertura requerida 'tthe_dry_maker.php' (include_path = '.; C: phppear') en C: wampwwwbootstrapsandboxyourawesomepage.php en la línea 16

incluir

  • (!) Advertencia: incluir (tthe_dry_maker.php): no se pudo abrir la secuencia: No existe tal archivo o directorio en C: wampwwwbootstrapsandboxyourawesomepage.php en la línea 16
  • (!) Advertencia: include (): Error al abrir 'tthe_dry_maker.php' para su inclusión (include_path = '.; C: phppear') en C: wampwwwbootstrapsandboxyourawesomepage.php en la línea 16
  • (!) Error fatal: llamada a la función indefinida highfive () en C: wampwwwbootstrapsandboxyourawesomepage.php en la línea 17

¿Ver la diferencia? Con el requerimiento, el script se detiene en seco tan pronto como no puede encontrar el archivo y se produce un error fatal. Por el contrario, la inclusión solo genera una advertencia cuando no puede encontrar el archivo. Más adelante en la página, sin embargo, cuando intentamos llamar a la función highfive, se produce un error fatal ya que no se puede llamar a una función que no está definida.


3. include_once ( $path)

Para mostrar la diferencia entre include e include_once, modifiquemos yourawesomepage.php para hacer múltiples llamadas de inclusión al mismo archivo dry maker con el que hemos estado trabajando para ver qué sucede. Luego intentaremos la misma prueba con include_once y discutiremos los resultados.

yourawesomepage.php

Salida de página

  • Manteniéndolo SECO desde hace mucho tiempo. © ® ™
  • ¿Sabes qué Jim? ¡Eres increíble, dame cinco!
  • (!) Error fatal: No se puede volver a declarar highfive () (previamente declarado en C: wampwwwbootstrapsandboxthe_dry_maker.php: 13) en C: wampwwwbootstrapsandboxthe_dry_maker.php en la línea 16

Lo que sucede aquí es que la página funciona bien hasta que llega a la segunda declaración de inclusión. En ese punto, incluya extracciones en el archivo y PHP verá que highfive se declara nuevamente. Este es un gran no no y se produce un error fatal. Ahora cambiemos el código para usar include_once.

yourawesomepage.php

Salida de página

  • Manteniéndolo SECO desde hace mucho tiempo. © ® ™
  • ¿Sabes qué Jim? ¡Eres increíble, dame cinco!
  • ¿Sabes qué Jim? ¡Eres increíble, dame cinco!

¡Excelente, sin errores! Verá que cuando usamos la declaración include_once, ya no obtenemos el error fatal y la página se ejecuta perfectamente. ¿Porqué es eso? Esto se debe a que include_once agrega la ruta original a una matriz, y si ve que la ruta intenta ser incluida nuevamente, la ignorará. Entonces, en este código anterior, cuando se activa la segunda instrucción include_once, PHP ahora sabe que la ruta proporcionada ya estaba incluida, por lo que la ignora. De esta manera, nunca se intenta volver a declarar la función highfive, y todo funciona sin problemas.


4. require_once ( $path)

Lo último en nuestra lista de funciones brillantes dentro de PHP es la función require_once. Esta opción tiene las propiedades de la función require original, además del hecho de que, al igual que include_once, se ignorarán varios intentos de requerir el mismo archivo. Los 4 tienen aplicaciones específicas como puede ver, por lo que ahora sabe cuál es mejor para sus aplicaciones.

La brillante comida para llevar

Estas son funciones simples en PHP, sin embargo, son increíblemente poderosas. ¿Qué es algo que es simple, pero increíblemente poderoso? Eso es, es brillante. Vimos cómo podemos usar php include para incluir html especificando la ruta de inclusión al archivo en cuestión. Esto se puede usar para un encabezado o un pie de página, y todo funciona como magia en el lado del servidor. Al observar php require vs php include, también aprendimos las diferencias de cómo pueden arrojar o no un error fatal y cuándo es mejor usarlos. Lo mismo puede decirse de php include_once vs php require_once.