lunes, 23 de diciembre de 2013

PHP: Diferencias y Similitudes entre Require e Include


Al realizar desarrollos en PHP es común encontrarse con las funciones require() e include(), estas funciones permite agregar en el script donde se insertan todo el contenido de otro script.
Estas funciones son muy útiles para agregar archivos con funciones comunes a varios scripts o para permitir que el código quede más ordenado. Por ejemplo, se crea una función para verificar si un RUT es válido y esta función se utiliza en diez script diferentes, en lugar de escribir 10 funciones, se puede crear un script que contenga la función y luego se agrega el archivo en los script donde se van a utilizar.

Script con la función valida_rut.

valida_rut.php

<?php
function valida_rut($in_rut){
.
.
.
}
?>

Utilización de la función require().

utiliza_valida_rut.php

<?php
require(“ruta/valida_rut.php”);
$rut = '13478217-2';
valida_rut($rut);
?>

Utilización de la función include().

utiliza_valida_rut.php

<?php
include(“ruta/valida_rut.php”);
$rut = '13478217-2';
valida_rut($rut);
?>

Estas dos funciones parecieran hacer lo mismo, pero tienen una importante diferencia, como lo dice su nombre la primera función (require) requiere que el archivo exista para agregar el archivo, si el archivo no existe el código presentará un error “PHP Fatal error” y la ejecución del código se detendrá. La segunda función (include) incluye el archivo, pero si este archivo no existe enviará un error de tipo “Warning” lo cual permitirá que el código se siga ejecutando.

Cuando se utiliza la función require() o include(), es como si ambos script quedarán convertidos en uno solo, por lo tanto el script padre (quien utiliza la función require o include) y script hijo (quien es insertado a través de la función require(“archivo.php”) o include(“archivo.php”)) tienen acceso a cualquier función que este en cualquiera de los dos archivos, así como a las funciones que existan en otros script que han sido agregados tanto en el padre como en el hijo a través de la función require o include. Esto puede presentar inconvenientes, por ejemplo si tanto el padre como el hijo agregan un script llamada repetido.php, todo el código contenido en repetido.php quedará duplicado, lo cual puede acarrear problemas de variables duplicadas o funciones duplicadas, por este motivo se debe tener especial cuidado en la utilización de estas funciones. Para evitar este tipo de problemas yo evito que los archivos hijos utilicen las funciones require e include, pero si las agregas con cuidado, verificando que un archivo padre y uno hijo no contengan los mismos script no existe ningún problema.

Una opción para evitar el problema de agregar dos veces el mismo script es utilizar las funciones require_once o include_once. Estas funciones trabajan igual que las anteriores con la única diferencia que evalúan si el archivo ha sido agregado anteriormente y si este es el caso no lo vuelen a incluir, sin embargo estas funciones son más pesadas y consumen más recursos lo que implica que deben ser utilizadas solo cuando sea necesario.

Otro punto que se debe tener en cuenta a la hora de utilizar las funciones require e include es la utilización de variables de sesión. Cuando se inicia una sesión que previamente estaba iniciada se presenta un error de tipo “Notice”, es posible que al utilizar require o include se inicie una sesión en el archivo padre y luego en el archivo hijo, lo cual provocará el error antes mencionado. Con un error de tipo “Notice” se puede continuar con la ejecución del código, pero es importante mencionar que esto puede hacer más tediosa la búsqueda de errores del sistema, porque el log de errores crece mucho más por este tipo de errores ocultando los errores más graves que pueden perjudicar la correcta ejecución del sistema.

Referencias:
"Gracias, por compartir tus conocimientos"

1 comentario: