4.1.5. Funciones

Una función es el término para describir una secuencia de órdenes que hacen una tarea específica de una aplicación más grande.

Una función de usuario en PHP no es más que una porción de código que podemos llamar en cualquier momento. De un lado, al dividir nuestro código en funciones podemos aislar y perfeccionar cada una de sus funcionalidades; de otro lado, podemos reutilizar este código, ya que una función puede ser llamada cuantas veces la necesitemos.

Para definir una función debemos usar la palabra reservada function. Para llamar la función basta con invocar su nombre.

Las declaraciones de funciones generalmente son denotadas por:

La sintaxis de una función es la siguiente:

function nombreFuncion(arg1, arg2,... argn) {
  //cuerpo de la función
}

Ejemplo: Conventir grados centígrados a grados Fahrenheit.

<!DOCTYPE html>
<html lang='es'>
<head>
  <meta charset='utf-8'>
  <meta name='viewport' content='width=device-width, initial-scale=1'>
  <meta http-equiv='x-ua-compatible' content='ie=edge'>
  <title>Operadores Aritméticos</title>
  <link href='http://netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet'>
  <link href='../formValidation/css/formValidation.min.css' rel='stylesheet'>
</head>
<body>
<div class='container'>
  <form id='pacheco' class='form-horizontal' name='pacheco' method="post">
    <fieldset> 
      <legend class='text-center'>Sentrencia de control <b>if</b></legend>
      <div class='form-group'>
        <label class='control-label col-sm-2' for='n'>n</label>
        <div class='col-sm-3'>
          <input id='n' class='form-control' name='n'>
        </div>
      </div>
     
      <div class="form-group"> 
        <div class="col-xs-9 col-xs-offset-3">
          <button type="submit" class="btn btn-primary">Validar</button>
          <button type="button" class="btn btn-default" id="resetButton">Reset</button>        
        </div>  
      </div>
    </fieldset>
  </form>
  <div class='row'>     
     <div class="col-sm-offset-2 col-sm-6" id="message"></div>
  </div>
</div>
<!-- script jQuery -->
</body>
</html>
  <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
  <script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js'></script>
  <script src='../formValidation/js/formValidation.js'></script>
  <script src='../formValidation/js/framework/bootstrap.min.js'></script>
  <script>
$(document).ready(function() {
  $('#pacheco') .formValidation({
    err: {
      container: 'tooltip'
    },
	icon: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
    },
    fields: {
      n: {
        validators: {
		  notEmpty: { message: 'El valor no puede ser nulo'},
		  integer: { message: 'El número no es un entero' }	
        }
      }
    }
  })
  .on('err.field.fv', function(e, data) {
    // Get the tooltip
    var $icon = data.element.data('fv.icon'), title = $icon.data('bs.tooltip').getTitle();
   
    // Destroy the old tooltip and crete a new one positioned to the right
    $icon.tooltip('destroy').tooltip({
      html: true,
      placement: 'right',
      title: title,
      container: 'body'
    });
  })
  
  .on('success.form.fv', function(e) {
      // Prevent form submission
      e.preventDefault();

      // Get the form instance
      var $form = $(e.target);

      // Get the FormValidation instance
  //    var bv = $form.data('formValidation');
        
      $.post('04SentCont01.php', $("#pacheco").serializeArray(),
	          function(data) { $('#message').html(data); }
      );
    });
	
    // Reset the Tooltip container form
    $('#resetButton').on('click', function(e) {
        var fields = $('#tooltipContainerForm').data('formValidation').getOptions().fields,
            $parent, $icon;

        for (var field in fields) {
            $parent = $('[name="' + field + '"]').parents('.form-group');
            $icon   = $parent.find('.form-control-feedback[data-fv-icon-for="' + field + '"]');
            $icon.tooltip('destroy');
        }

        // Then reset the form
        $('#tooltipContainerForm').data('formValidation').resetForm(true);
    });
	
  });
  </script>
<?php
  function cF( $grados ){
    return 1.8 * $grados + 32;
  }

  if( $_SERVER['REQUEST_METHOD'] == 'POST') {    
     $grados = $_POST['centigrados']; 
     echo $grados. ' grados centigrados equivalen a '.cF($grados).' grados Fahrenheit';  
  }
?>

PHP no distingue entre mayúsculas y minúsculas al nombrar las funciones, asi que cF sería lo mismo que CF, aunque es buena práctica ser consistente en la forma de escribir los nombres. Como curiosidad, podrás observar que en los mensajes de error, PHP siempre designa tus funciones en minúscula. Los paréntesis permiten pasar valores a las funciones (parámetros), son siempre necesarios, aunque no pases valor alguno

Una función puede retornar más de un valor, si lo regresamos como un arreglo y lo asignamos mediante la función de PHP list.

Ejemplo: Convertir grados Centígrados (Celsius) a grados Fahrenheit, Kelvin y Rankine.

<!DOCTYPE html>
<html lang='es'>
<head>
  <meta charset='utf-8'>
  <meta name='viewport' content='width=device-width, initial-scale=1'>
  <meta http-equiv='x-ua-compatible' content='ie=edge'>
  <title>Vectores</title>
  <link href='http://netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet'>
  <link href='../formValidation/css/formValidation.min.css' rel='stylesheet'>
</head>
<body>
<div class='container'>
  <form id='pacheco' class='form-horizontal' name='pacheco' method="post">
    <fieldset> 
      <legend class='text-center'>Convertidor de temperaturas</legend>
      <div class='form-group'>
        <label class='control-label col-sm-3' for='grados'>Grados centígrados </label>
        <div class='col-sm-3'>
          <input id='grados' class='form-control' name='grados'>
        </div>
      </div>
     
      <div class="form-group"> 
        <div class="col-xs-9 col-xs-offset-3">
          <button type="submit" class="btn btn-primary">Validar</button>
        </div>  
      </div>
    </fieldset>
  </form>
  <div class='row'>     
     <div class="col-sm-offset-2 col-sm-6" id="message"></div>
  </div>
</div>
<!-- Script jQuery -->
</body>
</html>
  <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
  <script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js'></script>
  <script src='../formValidation/js/formValidation.js'></script>
  <script src='../formValidation/js/framework/bootstrap.min.js'></script>
  <script>
$(document).ready(function() {
  $('#pacheco') .formValidation({
    err: {
      container: 'tooltip'
    },
	icon: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
    },
    fields: {
      grados: {
        validators: {
		  notEmpty: { message: 'El valor no puede ser nulo'},
           between: { min: -100, max: 1600, message: 'El número de elementos debe estar entre -100 y 1600' }
        }
      }
    }
  })
  .on('err.field.fv', function(e, data) {
    // Get the tooltip
    var $icon = data.element.data('fv.icon'), title = $icon.data('bs.tooltip').getTitle();
   
    // Destroy the old tooltip and crete a new one positioned to the right
    $icon.tooltip('destroy').tooltip({
      html: true,
      placement: 'right',
      title: title,
      container: 'body'
    });
  })
  
  .on('success.form.fv', function(e) {
      // Prevent form submission
      e.preventDefault();

      // Get the form instance
      var $form = $(e.target);
       
      $.post('04Conversion.php', $("#pacheco").serializeArray(),
	          function(data) { $('#message').html(data); }
      );
  });	
  });
  </script>  
<?php
  function conversion( $grados ){
    $f =  1.8 * $grados + 32;
	$r = $f  + 459.67;
	$k = $r/1.8;
	return array($f, $r, $k);
  }

  if( $_SERVER['REQUEST_METHOD'] == 'POST'){
     $convertir = $_POST['convertir'];
     $g = $_POST['grados'];   
     list($f, $r, $k) = conversion($g);
     echo "$g grados centígrados equivalen a:<br>";
     echo "$f grados Fahrenheit<br>";  
     echo "$r grados Rankine<br>";  
     echo "$k grados Kelvin";
  }
?>

Paso de parámetros por referencia

Hasta el momento usamos parámetros por valor. Si queremos pasar nuestras variables por referencia - de tal manera que los cambios en los argumentos persistan - es necesario anteponer al argumento o parámetro el símbolo "&".

Ejemplo: Considere el cálculo del área y volumen de una esfera en función de su radio mediante las siguientes formulas;

<!DOCTYPE html>
<html lang='es'>
<head>
  <meta charset='utf-8'>
  <meta name='viewport' content='width=device-width, initial-scale=1'>
  <meta http-equiv='x-ua-compatible' content='ie=edge'>
  <title>Vectores</title>
  <link href='http://netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet'>
  <link href='../formValidation/css/formValidation.min.css' rel='stylesheet'>
</head>
<body>
<div class='container'>
  <form id='pacheco' class='form-horizontal' name='pacheco' method="post">
    <fieldset> 
      <legend class='text-center'>Área y volumen de una esfera</legend>
      <div class='form-group'>
        <label class='control-label col-sm-2' for='radio'>Radio </label>
        <div class='col-sm-3'>
          <input id='radio' class='form-control' name='radio'>
        </div>
      </div>
     
      <div class="form-group"> 
        <div class="col-xs-9 col-xs-offset-3">
          <button type="submit" class="btn btn-primary">Validar</button>
        </div>  
      </div>
    </fieldset>
  </form>
  <div class='row'>     
     <div class="col-sm-offset-2 col-sm-6" id="message"></div>
  </div>
</div>
<!-- Script jQuery --> 
</body>
</html>
  <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
  <script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js'></script>
  <script src='../formValidation/js/formValidation.js'></script>
  <script src='../formValidation/js/framework/bootstrap.min.js'></script>
  <script>
$(document).ready(function() {
  $('#pacheco') .formValidation({
    err: {
      container: 'tooltip'
    },
	icon: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
    },
    fields: {
      radio: {
        validators: {
		  notEmpty: { message: 'El valor no puede ser nulo'},
           between: { min: 1, max: 30, message: 'El número de elementos debe estar entre 1 y 30' }
        }
      }
    }
  })
  .on('err.field.fv', function(e, data) {
    // Get the tooltip
    var $icon = data.element.data('fv.icon'), title = $icon.data('bs.tooltip').getTitle();
   
    // Destroy the old tooltip and crete a new one positioned to the right
    $icon.tooltip('destroy').tooltip({
      html: true,
      placement: 'right',
      title: title,
      container: 'body'
    });
  })
  
  .on('success.form.fv', function(e) {
      // Prevent form submission
      e.preventDefault();

      // Get the form instance
      var $form = $(e.target);
       
      $.post('04Esfera.php', $("#pacheco").serializeArray(),
	          function(data) { $('#message').html(data); }
      );
  });	
  });
  </script>
<?php
  function calculo( $radio, &$area, &$volumen ){
    $area  = 4 * pi() * $radio * $radio;
    $volumen = $area * $radio /3;
  }

  if( $_SERVER['REQUEST_METHOD'] == 'POST') {
     $radio   = $_POST['radio'];    
     $area    = 0;
     $volumen = 0;
     calculo($radio, $area, $volumen);
     $html = "Sea una esfera cuyo radio es $radio metros<br>";  
     $html.= "tiene un área de ".number_format($area,2,'.',',')." metros<sup>2</sup><br>";  
     $html.= "tiene un volumen de ".number_format($volumen,2,'.',',')." metros<sup>3</sup>";
	 echo $html;
   }
?>

Parámetros por defecto

Se puede proporcionar un valor por defecto para la función, que se aplicará salvo que específique otro al llamarla.

Cuando la función necesite varios valores y sea necesario fijar un valor por defecto, debe ser el último de los parámetros enviados. Esto implica un cuidadoso diseño, ya que al pasar los valores a una función debes hacerlo por el mismo orden fijado al definirla.

Ejemplo: Convertir de yardas a metros

<?php
  function yardas_metros( $yarda = 1 ){
    return 0.9144 * $yarda;
  }
  if( $_SERVER["REQUEST_METHOD"] =='POST') {
    $yardas = $_POST['yardas'];
    echo "Una yarda equivale a yardas_metros() metros</p>"; 
    $m = yardas_metros($yardas);
    echo "$yardas yardas equivalen a $m metros</p>";
  }
?>

Funciones recursivas

Se denominan funciones recursivas a aquellas que se llaman a sí mismas.

Ejemplo: Para todo número natural n, se llama n factorial o factorial de n al producto de todos los naturales desde 1 hasta n. Es decir:

Se define 0! = 1, para que la relación n! = n × (n - 1)! sea también válida para n = 1. Esta relación permite definir los factoriales por recursividad. La notación n! fue popularizada por el matemático francés Christian Kramp.

<?php
   function factorial($n = 1) {
     if($n <= 1)  {
         return 1;
     } else { //llamada así misma
         return $n * factorial($n - 1);
     }
   } //Fin: Factorial

  if( $_SERVER["REQUEST_METHOD"] == 'POST' ) {
     $n = $_POST['n'];
     echo "El factorial de $n = ".factorial($n);
  }
?>

Ejemplo: Determinar si un número es primo, par o impar.

<?php
  function tipo($m) {
 	 $n = abs($m);
     if($n == 0) return '0 es par';
     if($n == 1) return '1 es un primo impar';
     if($n == 2) return '2 es el único primo par';
     if($n % 2 == 0) return number_format($m, 0, '.', ',').' es par</p>';
     $multiplo = floor(sqrt($n));
     $i = 3;
     while ( ($n % $i !== 0) && ( $i <= $multiplo )) $i += 2;
       if( $i > $multiplo ) {
         return "$m es primo";
       } else {
          return "$m es impar";
     }
  }
  if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
	  $html= tipo($_POST['n']);
  }
?>

Ejemplo: Máximo común divisor.

En matemáticas el máximo común divisor (abreviado mcd) de dos números enteros es el mayor número que los divide sin dejar resto. El método que se codifica es el algoritmo de Euclides, el cual se describe formalmente como:

<!DOCTYPE html>
<html lang='es'>
<head>
  <meta charset='utf-8'>
  <meta name='viewport' content='width=device-width, initial-scale=1'>
  <meta http-equiv='x-ua-compatible' content='ie=edge'>
  <title>Vectores</title>
  <link href='http://netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet'>
  <link href='../formValidation/css/formValidation.min.css' rel='stylesheet'>
</head>
<body>
<div class='container'>
  <form id='pacheco' class='form-horizontal' name='pacheco' method="post">
    <fieldset> 
      <legend class='text-center'>Máximo común divisor</legend>
      <div class='form-group'>
        <label class='control-label col-sm-2' for='a'>a </label>
        <div class='col-sm-3'>
          <input id='a' class='form-control' name='a'>
        </div>
      </div>
      <div class='form-group'>
        <label class='control-label col-sm-2' for='b'>b </label>
        <div class='col-sm-3'>
          <input id='b' class='form-control' name='b'>
        </div>
      </div>
     
      <div class="form-group"> 
        <div class="col-xs-9 col-xs-offset-3">
          <button type="submit" class="btn btn-primary">Validar</button>
        </div>  
      </div>
    </fieldset>
  </form>
  <div class='row'>     
     <div class="col-sm-offset-2 col-sm-6" id="message"></div>
  </div>
</div>
<!-- Script jQuery -->
</body>
</html>
<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js'></script>
<script src='../formValidation/js/formValidation.js'></script>
<script src='../formValidation/js/framework/bootstrap.min.js'></script>
<script>
$(document).ready(function() {
  $('#pacheco') .formValidation({
    err: {
      container: 'tooltip'
    },
	icon: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
    },
    fields: {
      a: {
        validators: {
		  notEmpty: { message: 'El valor no puede ser nulo'},
           between: { min: 1, max: 500, message: 'El número debe estar entre 1 y 500' }
        }
      },
	  b: {
        validators: {
		  notEmpty: { message: 'El valor no puede ser nulo'},
           between: { min: 1, max: 500, message: 'El número debe estar entre 1 y 500' }
        }
      }
    }
  })
  .on('err.field.fv', function(e, data) {
    // Get the tooltip
    var $icon = data.element.data('fv.icon'), title = $icon.data('bs.tooltip').getTitle();
   
    // Destroy the old tooltip and crete a new one positioned to the right
    $icon.tooltip('destroy').tooltip({
      html: true,
      placement: 'right',
      title: title,
      container: 'body'
    });
  })
  
  .on('success.form.fv', function(e) {
      // Prevent form submission
      e.preventDefault();

      // Get the form instance
      var $form = $(e.target);
       
      $.post('04mcd.php', $("#pacheco").serializeArray(),
	          function(data) { $('#message').html(data); }
      );
  });	
  });
  </script>  
<?php
  function mcd($a, $b) {
    $a = abs($a);
	$b = abs($b);
    if ($b == 0) $resultado = $a; else $resultado = mcd($b, $a%$b);
 	return $resultado;
  } //mcd
  if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
      $a = $_POST['a'];
      $b = $_POST['b'];
      $mcd = mcd($a,$b);
      $html = "mcd( $a, $b) = $mcd<br>";
      $html.= "$a".'/'.$b. ' = '.$a/$mcd.'/'.$b/$mcd.'</p>';
	  echo $html;
  }
?>

Ejemplo: Mínimo común múltiplo

El mínimo común múltiplo (m.c.m.) de dos números naturales es el menor número natural que es múltiplo de todos ellos. Sólo se aplica con números naturales, es decir, no se usan decimales ni números negativos.

Conociendo el máximo común divisor de dos números, se puede calcular el mínimo común múltiplo de ellos, que será el producto de ambos dividido entre su máximo común divisor.


<!DOCTYPE html>
<html lang='es'>
<head>
  <meta charset='utf-8'>
  <meta name='viewport' content='width=device-width, initial-scale=1'>
  <meta http-equiv='x-ua-compatible' content='ie=edge'>
  <title>Vectores</title>
  <link href='http://netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet'>
  <link href='../formValidation/css/formValidation.min.css' rel='stylesheet'>
</head>
<body>
<div class='container'>
  <form id='pacheco' class='form-horizontal' name='pacheco' method="post">
    <fieldset> 
      <legend class='text-center'>Máximo común multiplo</legend>
      <div class='form-group'>
        <label class='control-label col-sm-2' for='a'>Numerador </label>
        <div class='col-sm-3'>
          <input id='a' class='form-control' name='a'>
        </div>
      </div>
      <div class='form-group'>
        <label class='control-label col-sm-2' for='b'>Denominador </label>
        <div class='col-sm-3'>
          <input id='b' class='form-control' name='b'>
        </div>
      </div>
     
      <div class="form-group"> 
        <div class="col-xs-9 col-xs-offset-3">
          <button type="submit" class="btn btn-primary">Validar</button>
        </div>  
      </div>
    </fieldset>
  </form>
  <div class='row'>     
     <div class="col-sm-offset-2 col-sm-6" id="message"></div>
  </div>
</div>
<!-- Script jQuery -->
</body>
</html>
<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js'></script>
<script src='../formValidation/js/formValidation.js'></script>
<script src='../formValidation/js/framework/bootstrap.min.js'></script>
<script>
$(document).ready(function() {
  $('#pacheco') .formValidation({
    err: {
      container: 'tooltip'
    },
	icon: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
    },
    fields: {
      a: {
        validators: {
		  notEmpty: { message: 'El valor no puede ser nulo'},
           between: { min: 1, max: 500, message: 'El número debe estar entre 1 y 500' }
        }
      },
	  b: {
        validators: {
		  notEmpty: { message: 'El valor no puede ser nulo'},
           between: { min: 1, max: 500, message: 'El número debe estar entre 1 y 500' }
        }
      }
    }
  })
  .on('err.field.fv', function(e, data) {
    // Get the tooltip
    var $icon = data.element.data('fv.icon'), title = $icon.data('bs.tooltip').getTitle();
   
    // Destroy the old tooltip and crete a new one positioned to the right
    $icon.tooltip('destroy').tooltip({
      html: true,
      placement: 'right',
      title: title,
      container: 'body'
    });
  })
  
  .on('success.form.fv', function(e) {
      // Prevent form submission
      e.preventDefault();

      // Get the form instance
      var $form = $(e.target);
       
      $.post('04mcm.php', $("#pacheco").serializeArray(),
	          function(data) { $('#message').html(data); }
      );
  });	
  });
  </script>  
<?php
   function mcd($a, $b) {
      if ($b == 0) $resultado = $a;
	   else $resultado = mcd($b, $a%$b);
 	 return $resultado;
   } //mcd
  
   function mcm($a, $b) {
	 $a = abs($a);
	 $b = abs($b);
	 return ($a * $b)/mcd($a, $b); 
   }

   if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
     $a = $_POST['a'];
     $b = $_POST['b'];
	 $mcm = mcm($a,$b);
     echo " mcm( $a, $b) = $mcm</p>";
   }
?>

Ejemplo: La constante matemática e

Es uno de los más importantes números reales. El logaritmo en base e se llama logaritmo natural o neperiano. El número e, conocido a veces como número de Euler o constante de Napier fue reconocido y utilizado por primera vez por el matemático escocés John Napier, quien introdujo el concepto de logaritmo en el cálculo matemático.

El número e, al igual que el número π, es un número trascendente, es decir, que no puede ser obtenido directamente mediante la resolución de una ecuación algebraica. Por lo tanto, es un irracional y su valor exacto no puede ser expresado como un número finito de cifras decimales o con decimales periódicos. Su valor aproximado (truncado) es dado por la función

El código PHP para calcular el número de Euler esta dado por:

<?php
 function numeroEuler() {
	 $error = 0.000000000001;
	 $e = 2;
	 $anterior = 0;
	 $i = 2;
	 $f = 2;
	 while ( abs($e - $anterior) >= $error) {
		 $anterior = $e;
		 $e += 1/$f;
		 $f = $f * ++$i;
	 }
	 return $e;
 }
 echo 'Número de Euler o constante de Napier = '.numeroEuler(); 
?>

Ejemplo: Mediante una serie de Taylor podemos calcular muchas funciones importantes. Como por ejemplo la función exponencial dada por:

Un código depurado se presenta a continuación. El cual es más eficiente al no tener que calcular cada factorial.

<!DOCTYPE html>
<html lang='es'>
<head>
  <meta charset='utf-8'>
  <meta name='viewport' content='width=device-width, initial-scale=1'>
  <meta http-equiv='x-ua-compatible' content='ie=edge'>
  <title>Vectores</title>
  <link href='http://netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet'>
  <link href='../formValidation/css/formValidation.min.css' rel='stylesheet'>
</head>
<body>
<div class='container'>
  <form id='pacheco' class='form-horizontal' name='pacheco' method="post">
    <fieldset> 
      <legend class='text-center'>exp(x)</legend>
      <div class='form-group'>
        <label class='control-label col-sm-2' for='centigrados'>e </label>
        <div class='col-sm-3'>
          <input id='e' class='form-control' name='e'>
        </div>
      </div>
     
      <div class="form-group"> 
        <div class="col-xs-9 col-xs-offset-3">
          <button type="submit" class="btn btn-primary">Validar</button>
        </div>  
      </div>
    </fieldset>
  </form>
  <div class='row'>     
     <div class="col-sm-offset-2 col-sm-6" id="message"></div>
  </div>
</div>
<!-- Script jQuery -->
</body>
</html>
<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js'></script>
<script src='../formValidation/js/formValidation.js'></script>
<script src='../formValidation/js/framework/bootstrap.min.js'></script>
<script>
$(document).ready(function() {
  $('#pacheco') .formValidation({
    err: {
      container: 'tooltip'
    },
	icon: {
      valid: 'glyphicon glyphicon-ok',
      invalid: 'glyphicon glyphicon-remove',
      validating: 'glyphicon glyphicon-refresh'
    },
    fields: {
      e: {
        validators: {
		  notEmpty: { message: 'El valor no puede ser nulo'},
           between: { min: 1, max: 20, message: 'El número de elementos debe estar entre 1 y 20' }
        }
      }
    }
  })
  .on('err.field.fv', function(e, data) {
    // Get the tooltip
    var $icon = data.element.data('fv.icon'), title = $icon.data('bs.tooltip').getTitle();
   
    // Destroy the old tooltip and crete a new one positioned to the right
    $icon.tooltip('destroy').tooltip({
      html: true,
      placement: 'right',
      title: title,
      container: 'body'
    });
  })
  
  .on('success.form.fv', function(e) {
      // Prevent form submission
      e.preventDefault();

      // Get the form instance
      var $form = $(e.target);
       
      $.post('04ExponencialSerie.php', $("#pacheco").serializeArray(),
	          function(data) { $('#message').html(data); }
      );
  });	
  });
  </script>  
<?php
  function exponencial($x = 0) {
	//máximo error permitido
	$error = 0.000000000001;
    if ($x != 0) { $e = 1;} else return 0;
    $anterior = 0;
	$i = 0;
	$f = 1;
	//Aproximación
	while ( abs($e - $anterior) >= $error) {
      $anterior = $e;
	  $f *= ++$i;
      $e += pow($x, $i)/$f;
	}
    return number_format($e,4,'.',',');
  }
  if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
      $x = $_POST['e'];
      echo "Exponente($x) = ".exponencial($x); 
  }
?>

Ejemplo: Imprimiremos la fecha actual mediante el uso de arreglos.

<?php
  function imprimeFecha(){
    $mesArray = array(
		1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril', 5 => 'Mayo', 6 => 'Junio', 
		7 => 'Julio', 8 => 'Agosto', 9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 
		12 => 'Diciembre'
	);
     
	$semanaArray = array(
		'Mon' => 'Lunes', 'Tue' => 'Martes', 'Wed' => 'Miercoles', 'Thu' => 'Jueves', 
		'Fri' => 'Viernes', 'Sat' => 'Sábado', 'Sun' => 'Domingo', 
	);
    
	$mes = $mesArray[date('n')];
	$nombreDia = $semanaArray[date('D')];
	
	$dia = date('d');
	$year = date ('Y');
	
    return $nombreDia.' '.$dia.' de '.$mes.' de '.$year;
  }
  echo imprimeFecha();
?>