Contexto


Anteriormente viste qué es una función, cómo definirla y la labor que cumple para que la programación sea reusable y fácil de acceder. En este tema verás cómo utilizar funciones reutilizables y la lógica que hay en ello.

Algunos pros de utilizar funciones en nuestros programas son los siguientes:

  • Escribimos menos código.
  • Podemos encontrar con mayor facilidad errores.
  • Reduce el tiempo de carga de las páginas.
  • Reduce el tiempo de ejecución, pues cada función solamente se compila una sola vez, sin importar cuantas veces sea llamada.

Cuando involucramos una o más funciones, valores y argumentos, entonces podemos crear una clase. Pronto verás el uso de clases y objetos, ya que después de todo PHP es un lenguaje de Programación Orientado a Objetos (OOP en inglés).

Explicación


4.1 Uso de parámetros en una funcion.

A continuación aprenderás a utilizar las funciones de manera eficiente, pasando parámetros a través de ellas en ambas direcciones ¡empecemos!

Observa este ejemplo donde utilizaremos algunas funciones internas de PHP:

<?php
  echo fix_names("WILLIAM", "henry", "gatES");
  function fix_names($n1, $n2, $n3) {
 	$n1 = ucfirst(strtolower($n1));
 	$n2 = ucfirst(strtolower($n2));
 	$n3 = ucfirst(strtolower($n3));   
     return $n1 . " " . $n2 . " " . $n3; //regresa William Henry Gates
  }
?>

En este ejemplo se utiliza la función interna ucfirst() cuya labor es capitalizar la primer letra de las palabras y  strtolower() que convierte el string a minúsculas. Ahora toca el turno de diseccionar este programa:

  • En primer lugar el echo en la expresión echo fix_names("WILLIAM", "henry", "gatES"); está imprimiendo el resultado de la función fix_names() que tiene como parámetros a los nombres que están escritos de manera extraña.
  • Observando la función function fix_names(){ } puedes ver que entre los paréntesis se piden tres valores representados por las variables $n1, $n2 y $n3.
  • Estas variables son sustituidas en el aire por los strings que la función está llamando en la primera expresión. Entonces, si pudiéramos ver el proceso en cámara lenta sería:
  • function fix_names($n1, $n2, $n3) {
           $n1 = ucfirst(strtolower("WILLIAM"));
           $n2 = ucfirst(strtolower("henry"));
           $n3 = ucfirst(strtolower("gatES"));   
         return $n1 . " " . $n2 . " " . $n3; //regresa William Henry Gates
      }

  • Analicemos el proceso del código que se ejecuta entre las llaves:

  • $n1 = ucfirst(strtolower("WILLIAM"));
    La primer función que se ejecuta es la que está dentro de los paréntesis:
    strtolower ("WILLIAM") // strtolower() convierte la palabra a minusculas
    Entonces, la segunda función entra en acción:
    ucfirst("william"); //ucfirst() convierte la primer letra a mayusculas

  • Al final, el comando return termina la ejecución y regresa los valores especificados. Los espacios entre las comillas son para crear un espacio entre las palabras y el punto ya sabemos que une, concatena, a los strings.

Entonces el concepto es simple. Al diseñar la función, tenemos que especificar cuántos parámetros se recibirán de afuera de la misma. En el caso anterior, la función necesita de tres parámetros para servir correctamente.

¿Qué sucede si a  echo fix_names("WILLIAM", "henry", "gatES"); le quitamos un argumento?

Haz la prueba y analiza el mensaje. Te darás cuenta que la función pide y requiere de exactamente tres elementos para funcionar adecuadamente. Observa este nuevo ejemplo:

<?php
  function _preparaCafe($coffee = "cappuccino") {
      return "Preparemos una taza de $coffee.\n";
  }
  echo _preparaCafe(); //llamamos a la funcion, no hay cambios
  echo _preparaCafe(null); //llamamos y cambiamos el valor a null
  echo _preparaCafe("espresso"); //ahora cambiamos el valor a espresso
?>

La función  function _preparaCafe($coffee = "cappuccino") está colocando una variable $coffe como un parámetro para procesar. En los echo posteriores, estamos cambiando esa variable al momento de ejecutar la función. Si al llamar a la función no incluimos un parámetro entonces se asigna el parámetro por defecto que en el ejemplo anterior es “cappuccino”.

Haz clic en el botón para acceder a la práctica.


4.2 Incluyendo y requiriendo archivos

Una vez que te acostumbras a escribir grupos de funciones puedes empezar a construir tu propia biblioteca que te permitirá acortar el tiempo de desarrollo. ¿Para qué volver a escribir un procesador de un formulario si ya lo hiciste en un proyecto anterior? Este comentario no sólo aplica a tus librerías, sino a las que te compartan o encuentres como código abierto en Internet.

Sin embargo, no hay necesidad de copiar y pegar estas funciones. Lo que debes hacer es agruparlas en algún folder y llamarlas mediante uno de los métodos include o require.
include / include_once. Este comando le ordena a PHP que tome desde una ubicación especifica un archivo y lo coloque dentro del punto de inserción que le indicamos. Es como copiar y pegar el contenido de esos archivos en el punto señalado.

¡Realiza un ejemplo!

  1. En un nuevo folder en la raíz de XAMPP crea un nuevo archivo de PHP, nómbralo como quieras y escribe:
<?php
  echo "ESTO ES INSERTADO!";
?>
  1. Crea otro archivo PHP junto a la ubicación del anterior, nómbralo como quieras y escribe:
<html>
<head><title>HOLA</title></head>
  <body>
     <h1>Hola de nuevo!</h1>
     <?php
        include "nombre_de_tu_archivo_#1.php";
     ?>
     <h3>Lo de arriba es de PHP!</h3>
 </body>
</html>

El proceso es bastante claro por sí mismo. El comando include le ordena a PHP que busque en la ubicación definida entre paréntesis al archivo que necesitamos. Si alguna vez has visto plantillas de Joomla! o de Wordpress, habrás observado que utilizan ampliamente esta técnica. No obstante, debes tener en mente que es posible entrar en un conflicto si se anidan includes en tus archivos.

Imagina la siguiente situación:

En tu plantilla estás llamando con include al archivo x.php que tiene varias funciones útiles para el programa, pero más abajo también invocas al archivo y.php que, a su vez, en su interior también llama a x.php. ¿Confuso? Este caso probablemente arroje errores, pues estarás intentando definir variables o constantes o funciones varias veces.

Para evitar esto puedes utilizar la variante include_once lo cual resuelve el problema de la siguiente manera:

<?php
  include_once "nombre_de_tu_archivo_#1.php";
?>

Con esta simple acción, si el programa se encuentra con un include o un include_once que ya se ejecutó y se encuentra con otro igual, simplemente lo ignorará. Utilicemos entonces include_once como regla general.

Ahora bien, la diferencia entre include y require es simple. El comando include solamente intentará incluir el archivo que se le pidió. Independientemente si lo encuentra o no, el programa sigue adelante. La ejecución no se detiene, lo único a lo que podemos aspirar es a una advertencia por parte de PHP.

Por el contrario, para require es muy importante que el archivo que se le pide llegue y se instale en el programa. Si no lo encuentra detiene la ejecución y envía un mensaje de error fatal. La sintaxis es la misma, y al igual que con include, usaremos require_once en lugar del ordinario require.

<?php
  require_once "nombre_de_tu_archivo_#1.php";
?>

Haz clic en el botón para acceder a la práctica.


Cierre


En el presente tema has visto cómo utilizar las funciones pasando parámetros para mejorar el código de tu programa, además ya sabes cómo reutilizar piezas de código PHP e incluirlas en tus archivos para usarlas en varias partes de tus archivos y ahorrarte el tiempo de retrabajo al modificarlos.

Checkpoint


Asegúrate de poder:

  • Utilizar las funciones pasando parámetros.
  • Incluir y requerir archivos en el código escrito.
  • Crear una librería de código para tu uso personal.

Referencias


  • Boronczyk, T., Naramore, E., Gerner, J., Le Scouarnec, Y. y Stolz, J. (2009). Beginning PHP 6, Apache, MySQL 6 Web Development. EE. UU.: Wiley.
  • Nixon, R. (2014). Learning PHP, MySQL & JavaScript With jQuery, CSS & HTML5. EE. UU.: O’Reilly Media.