Desarrollo de aplicaciones web con PHP y MySQL
Funciones en PHP
Sergio Sáez y José Luis Poza
© 2015 Sergio Sáez y José Luis Poza

1. Funciones en PHP

<?php
  nombre_funcion_1
();
  
nombre_funcion_2(25);
  
nombre_funcion_3(34$variable"Hola");
  
$respuestanombre_funcion_4($variable *3);
?>

2. Interfaz de una función

<?php resource fopen(string filenamestring mode
                  
[, bool use_include_path]); ?>
<?php
$handle 
fopen("file.txt""r"true);
$handle fopen("/home/ssaez/file.gif""wb");
$handle fopen("http://www.example.com/""r");
$handle fopen("ftp://user:password@example.com/somefile.txt""w");
?>

3. Errores de invocación

<?php
  $var
noexiste(25);
?>
PHP Fatal error: Call to undefined function noexiste() in - on line 2

4. Definición de funciones

PHP Parse error: syntax error, unexpected 'nombre' (T_STRING) in - on line 2

5. Funciones con parámetros

<?php
function muestra_tabla($datos) {
  echo 
"<table border='1'>\n";

  
$valorreset($datos);
  while (
$valor !== false) {
    echo 
"<tr><td>$valor</td></tr>\n";
    
$valornext($datos);
  } 
// endwhile

  
echo "</table>\n";
// end muestra_tabla

$mis_datos= array("Fila uno",
                  
"Fila dos",
                  
"Fila tres");
muestra_tabla($mis_datos);
?>
<table border='1'>
<tr><td>Fila uno</td></tr>
<tr><td>Fila dos</td></tr>
<tr><td>Fila tres</td></tr>
</table>
Fila uno
Fila dos
Fila tres

6. Parámetros opcionales

<?php
function muestra_tabla($datos$border=1$cellpadding=4$cellspacing=4) {
    echo 
"<table border='$border' cellpadding='$cellpadding' ";
    echo 
"cellspacing='$cellspacing'>\n";
    
$valorreset($datos);
    while (
$valor !== false) {
        echo 
"  <tr><td>$valor</td></tr>\n";
        
$valornext($datos);
    } 
// endwhile
    
echo "</table>\n<br>\n";
// end muestra_tabla

$mis_datos= array("Fila uno""Fila dos""Fila tres");
muestra_tabla($mis_datos);
muestra_tabla($mis_datos4);
muestra_tabla($mis_datos488);
?>
<table border='1' cellpadding='4' cellspacing='4'>
  <tr><td>Fila uno</td></tr>
  <tr><td>Fila dos</td></tr>
  <tr><td>Fila tres</td></tr>
</table>
<br>
<table border='4' cellpadding='4' cellspacing='4'>
  <tr><td>Fila uno</td></tr>
  <tr><td>Fila dos</td></tr>
  <tr><td>Fila tres</td></tr>
</table>
<br>
<table border='4' cellpadding='8' cellspacing='8'>
  <tr><td>Fila uno</td></tr>
  <tr><td>Fila dos</td></tr>
  <tr><td>Fila tres</td></tr>
</table>
<br>
Fila uno
Fila dos
Fila tres

Fila uno
Fila dos
Fila tres

Fila uno
Fila dos
Fila tres

<?php
function muestra_tabla($datos$border=1$cellpadding=4$cellspacing=4) {
    if (!isset(
$datos))
        die(
"Variable '\$datos' indefinida en la función 'muestra_tabla'");
    echo 
"<table border='$border' cellpadding='$cellpadding' ";
    echo 
"cellspacing='$cellspacing'>\n";
    
$valorreset($datos);
    while (
$valor !== false) {
        echo 
"  <tr><td>$valor</td></tr>\n";
        
$valornext($datos);
    } 
// endwhile
    
echo "</table>\n<br>\n";
// end muestra_tabla

$mis_datos= array("Fila uno""Fila dos""Fila tres");
muestra_tabla();
?>
PHP Warning:  Missing argument 1 for muestra_tabla(), called in - on line 16 and defined i
Variable '$datos' indefinida en la función 'muestra_tabla'

7. Ámbito de las variables

<?php
$var
"Contenido original";

function 
una_funcion() {
  echo 
"Dentro de la funci&oacute;n: \$var = '$var' <br>\n";
  
$var"Nuevo contenido";
  echo 
"Dentro de la funci&oacute;n: \$var = '$var' <br>\n";
}

$var"Contenido antes de la funci&oacute;n";
una_funcion();
echo 
"Fuera de la funci&oacute;n: \$var = '$var' <br>\n";
?>
PHP Notice: Undefined variable: var in - on line 5 Dentro de la función: $var = ''
Dentro de la función: $var = 'Nuevo contenido'
Fuera de la función: $var = 'Contenido antes de la función'
<?php
function una_funcion() {
  global 
$var;
  echo 
"Dentro de la funci&oacute;n: \$var = '$var' <br>\n";
  
$var"Nuevo contenido";
  echo 
"Dentro de la funci&oacute;n: \$var = '$var' <br>\n";
}
$var"Contenido original";
una_funcion();
echo 
"Fuera de la funci&oacute;n: \$var = '$var' <br>\n";
?>
Dentro de la función: $var = 'Contenido original'
Dentro de la función: $var = 'Nuevo contenido'
Fuera de la función: $var = 'Nuevo contenido'

8. Paso de variables por referencia

9. Volviendo de una función

<?php
function mayor($x$y) {
  if (!isset(
$x) || !isset($y)) {
    echo 
"La función espera dos parámetros\n";
    return ;
  }
  echo ((
$x $y) ? $x $y) . "\n";
}
list(
$a$b$c)= array(12.51.9);
mayor($a$b);
mayor($a$c);
mayor($a$d);
?>
2.5
1.9
PHP Notice:  Undefined variable: d in - on line 12
La función espera dos parámetros
<?php
function mayor($x$y) {
  if (!isset(
$x) || !isset($y)) {
    return 
false;
  } else
    return ((
$x $y) ? $x $y);
}
list(
$a$b$c)= array(12.51.9);
$maxmayor($a$b);
if (
$max !== false) echo $max "\n";
$maxmayor($a$d);
if (
$max !== false) echo $max "\n";
?>
2.5
PHP Notice:  Undefined variable: d in - on line 11

10. Funciones recursivas

<?php
function reverse_r($str) {
    if (
strlen($str) > 0)
        
reverse_r(substr($str,1));
    echo 
substr($str01);
}
reverse_r("Hola mundo!");
?>

Muestra:

!odnum aloH

Se ejecutan:

reverse_r("Hola mundo!")
reverse_r("ola mundo!")
reverse_r("la mundo!")
reverse_r("a mundo!")
reverse_r(" mundo!")
reverse_r("mundo!")
reverse_r("undo!")
reverse_r("ndo!")
reverse_r("do!")
reverse_r("o!")
reverse_r("!")
reverse_r("")

11. Funciones anidadas

<?php
function saludo() {
  function 
hola() {
    return 
"Hola";
  }
  echo 
hola() . " a todos.\n";
}
// $a= hola(); # Causaría un error fatal ya que todavía no está definida
saludo();
echo 
hola(); /* Ya se puede invocar, puesto que se
                ha definido al invocar a saludo() */
?>
Hola a todos.
Hola

12. Funciones variables

<?php
  
function foo() {
      echo 
"Ejecutando foo()<br />\n";
  }
  function 
bar($arg '')
  {
      echo 
"Ejecutando bar(); el parámetro es '$arg'.<br />\n";
  }
  
$func 'foo';
  
$func();        // Esto invoca a foo()
  
$func 'bar';
  
$func('test');  // Esto invoca a bar()
?>
Ejecutando foo()<br />
Ejecutando bar(); el parámetro es 'test'.<br />

13. Invocando métodos de objetos

<?php
  
class mensaje {
    static function 
line ($msg){
      echo 
$msg "<br>\n";
    }
    function 
par($msg) {
       echo 
"<p>$msg</p>\n";
    }
  }

  
mensaje::line("Método estático de clase!");

  
$t= new mensaje;
  
$t->par("Método de objeto!");
  
$t->line("Método estático de objeto!");
?>
Método estático de clase!<br>
<p>Método de objeto!</p>
Método estático de objeto!<br>