Reutilización de código

Para los casos en los que deseemos reutilizar código definido en un script en otro diferente, PHP incorpora dos funciones similares a la sentencia _#include_ de C o C++. Estas funciones son _require()_ e _include()_. Ambas funciones incluyen y evalúan el código del fichero cuyo nombre se les indica como parámetro en el fichero desde el que se hace la llamada, como si el código hubiera sido tecleado allí directamente. La única diferencia entre ambas funciones es como actúan en caso de error. La función _include()_ muestra un mensaje _Warning_, con lo que el script sigue funcionando, mientras que la función _require()_ produce un error fatal, que hace que el script se detenga. Si alguna de las dos funciones es utilizada en el cuerpo de una función, el código incluido se comportará como si hubiera sido tecleado dentro de la propia función.

Es muy importante tener en cuenta que antes de la llamada a _include()_ o _require()_ automáticamente se cierra el etiquetado PHP (como si hubiéramos añadido ?>). Tras la llamada, el etiquetado se vuelve a abrir (como si hubiéramos añadido <\?php). es="" por="" ello="" que="" cualquier="" código="" deba="" ser="" ejecutado="" como="" php="" dentro="" del="" archivo="" incluido="" debe="" **escrito="" siempre="" entre="" etiquetas="" de="" inicio="" y="" fin="" php**.="" <="" p="">

Podemos ver el funcionamiento de esta característica del lenguaje con un ejemplo muy sencillo. En primer lugar, creamos un archivo llamado _ejemplo_require.php_:

<?php
   echo '<strong>Hemos incluido este fichero</strong>.<br />';
?>

que será incluido desde otro fichero diferente llamado _prueba.php_:

<?php
   echo 'Dentro del fichero prueba.php.<br />';
   require('ejemplo_require.php');
   echo 'Fin del script prueba.php.<br />';
?>

Se deja como ejercicio al lector comprobar qué sucede en el caso de eliminar las etiquetas de apertura y cierre de PHP en el fichero _ejemplo_require.php_.

No es necesario que el archivo incluido tenga una extensión determinada, ya que PHP no comprueba este detalle. Sin embargo, a la hora de escoger la extensión, se suele adoptar una convención que permite conocer el tipo de contenido que tendrá un fichero:

  • .inc se utilizará para una librería de funciones o una secuencia de comandos PHP.

  • .html será usado en el caso en el que el fichero tan sólo contenga código HTML.

  • .php es para ficheros con código PHP que además de incluirlos en otro fichero querremos interpretarlos por separado.

Cuando indicamos el nombre de un archivo a incluir, PHP los buscará siguiendo la ruta absoluta si ésta es indicada. En caso contrario, se busca en el propio directorio donde se encuentra el script que lo incluye o en la ruta especificada por el parámetro _include_path_ en el fichero de configuración de PHP. También será posible utilizar URLs si previamente le hemos dado al parámetro _allow_url_fopen_ del fichero de configuración de PHP el valor _on_.

Las funciones _require_once()_ e _include_once()_ funcionan igual que _require()_ e _include()_, respectivamente, con la única diferencia de que garantizan que el archivo se incluye una única vez, aunque se intente incluir desde varios lugares diferentes. Esto será útil en el caso de funciones de biblioteca que requieran una única ejecución, como archivos usados para definir clases a funciones, código para realizar conexiones a base de datos, o código para leer datos de un fichero.

Podríamos también preguntarnos cómo afecta al ámbito de las variables la inclusión de código por medio de estas funciones que hemos estado viendo hasta ahora. Lo que sucede realmente es que el código incluido hereda el ámbito de la línea donde se realiza la inclusión. Esto quiere decir que si se incluye el código fuera de una función éste tendrá ámbito global, y si se hace dentro de una función tendrá ámbito local, dentro de la propia función. También es interesante saber que podemos utilizar dentro del código incluido cualquier variable declarada antes de la inclusión.

Reutilización en varios ficheros

A la hora de reutilizar código puede surgir un problema si lo que se quiere es reutilizar un mismo fichero en todos los scripts de nuestra aplicación.La solución manual, consistente en incluir la llamada a _include()_ o _require()_ en todos y cada uno de nuestro archivos PHP, además de tediosa, es poco eficiente, ya que, ¿qué ocurre si cambiamos el nombre del fichero incluido? Nos tocaría hacer cambios en todos los ficheros de nuestra aplicación.

Una posible solución consiste en utilizar dos directivas dentro de _php.ini_, el archivo de configuración de PHP. Estas directivas son _auto_prepend_file_ y _auto_append_file_ que de manera automática incluyen un fichero (al principio o al final, respectivamente) en todos los archivos PHP, como si se hubiera usado un _require()_. Este es el aspecto que tendrían las directivas en un sistema Windows:

auto_prepend_file = "C:\wamp\www\includes\cabecera.inc"
auto_append_file = "C:\wamp\www\includes\pie_pagina.inc"

El problema de este método es que los archivos son incluidos en todos y cada uno de los ficheros, no permitiéndose ninguna excepción. Otra posibilidad consiste en utilizar una configuración para un directorio independiente mediante un archivo .htaccess. El servidor web Apache permite el uso de un fichero de este tipo para añadir directivas de configuración dentro de una carpeta sin afectar a las demás. En nuestro caso, deberíamos incluir en dicho archivo algo como lo siguiente:

php_value auto_prepend_file = "C:\wamp\www\includes\cabecera.inc"
php_value auto_append_file = "C:\wamp\www\includes\pie_pagina.inc"

Este método por supuesto también serviría para establecer el valor de otras directivas de configuración de PHP de manera independiente para cada carpeta. Tan solo se debe incluir la cadena _php_value_ al principio de la línea correspondiente. Otra ventaja de usar este fichero es que no es necesario reiniciar el servidor web ni disponer de derechos de administrador, tan solo de derechos para leer y escribir en la carpeta donde tengamos nuestro código PHP. Esto nos será muy útil en el caso en el que nuestra aplicación esté hospedada en un servidor que no sea gestionado por nosotros. La desventaja principal es que los archivos .htaccess se leen y analizan cada vez que se solicita un archivo del directorio, lo que puede afectar al rendimiento.

results matching ""

    No results matching ""