Funciones PHP

Función: es una subrrutina independiente que realiza una operación muy definida, la cual la podemos utilizar muchas veces desde nuestro código. Esto significa un código más legible, compacto y fácil de depurar, ya que dentro de nuestro script solo tendremos la llamada a la función y la función en sí será externa (otro archivo o biblioteca), o estara en uan parte del script destinada a esa función.

Función externa: la definición de la función puede hacerse fuera de la secuencia de comandos y almacenarse en una biblioteca externa , de esta manera estará accecible a todos los programas.

Función interna: la definición de la función se realiza dentro de la secuencia de comandos o script de esta manera estará accecible desde cualquier punto del mismo programa, pero los programas externos no podrán hacer uso de ella.

Cuando necesitemos una función, la utilizaremos haciendo una llamada por su nombre específico. En ocasones la función también recibe valores, estos irán colocados entre paréntesis y se denominan parámetros.
Después de haberse ejecutado la función, esta devuelve un resultado al programa llamante, este resultado se denomina valor de retorno o valor de función.

// Sintaxis de una función con paso de parámetros 
function nombreFuncion($parametro_1, $parametro_2) {

	// Expresión
	
	// Devolver valor de parámetros 
	return $parametro_1 + $parametro_2; 	
	
}


$parametro_1 = 4;
$parametro_2 = 2;
	
	// Llamada a la función exactamente con su mismo nombre 
	echo 'Suma parámetros = ' . nombreFuncion($parametro_1, $parametro_2); 
	// Devuelve 6  

Función con paso de parámetros

Resultado devuelto por la función con paso de parámetros.
Suma parámetros = 6

Función con paso de parámetros

// Sintaxis de una función sin parámetros 
function sinParametros( ){
	
	$var_1 = 4;
	$var_2 = 2;
	
	// Suma de variables 
	$resultado = $var_1 + $var_2;
	
	echo 'La suma de las variables = ' . $resultado; // Devuelve 6 
	
}

// Llamada a la función 
sinParametros(); 

La suma de las variables = 6

El nombre de una función no debe empezar con el símbolo dolar ($), debe ser un nombre único. Aunque los nombres de función no diferencian entre mayúsculas y minúsculas es recomendable ser coherente al nombrar la función exactamente con el mismo nombre con el que ha sido llamada.
Los parámetros son obcionales y van entre los parántesis y separados por una coma (,).
La instrucción return es obcional, ya que la función en algunos casos puede retornar un valor o realizar cualquier acción determinada sin necesidad de retornar ningún valor.

Tipos de función

Las funciones de PHP se clasifican en tres tipos:

Funciones nativas del lenguage: Son las que se utilizan con matrices y cadenas.

Subir

Funciones extensión de lenguaje: Las podemos encontrar en bibliotecas de extensión y no están instaladas en la configuración básica de PHP. Al estar en bibliotecas algunas extensiones se instalan de forma predeterminada aunque hay otras que se tienen que instalar en el sistema de forma específica.

Subir

Funciones definidas por el usuario: Se trata de las funciones que creamos como usuarios, son personalizadas para resolver un problema propio de nuesto código.

Subir

Definición de funciones

Función definida en el código principal
Podemos definir una función entre el resto del código principal, la posición de la definición de la función puede estar en cualquier parte del código principal, tanto dalante como detrás de la posición en que es llamada. Si definimos una función y no es utilizada, no pasa nada, solo se ejecutará al tener una llamada.

Funciones definidas dentro de una condición
Si definimos una función dentro de un bloque condicional if(), ésta no podrá ser llamada si no se cumple la condición en la que se encuentra definida la función.

Función definida dentro de otra función
Si definimos la función_2 dentro de función_1, la función_2 no se podrá ejecutar si no ha sido llamada antes la función_1.

Subir

Parámetros de la función

Una función puede recibir tres tipos de parámetros

Pasados por valor: forma predeterninada y más segura para pasar parámetros a la función. Los parámetros llegan a la función como una copia de la variable pasada como parámetro, lo que significa que la variable cambiará de valor en la ejecución de la función, pero no variará el valor de la variable original.

// Pasados por valor 	   
$porValor = 100;

echo "Valor inicial de \$porValor: $porValor <br />";

// Llamada a función con paso de parámetro por valor 
prueba( $porValor );


  // Modificamos el valor del parámetro 
  function prueba( $porValor ) {
	  
	echo "Valor de \$porValor dentro de función: $porValor <br />"; 
	// Sigue siendo el mismo valor 
	  
	$porValor = 200; // Cambiamos el valor de $porValor 
	  
	// Valor modificado 
	echo "Valor de \$porValor modificado dentro de la función: $porValor  <br />"; 
  
  } 


Valor inicial de $porValor fuera de la función: 100

Valor de $porValor dentro de función: 100

Valor de $porValor modificado dentro de la función: 200

Subir

Pasados por referencia: La variable pasada no será una copia de la variable del código llamante, sino que será la propia variable la que pase. Esta forma de pasar parámetros nos irá bien en el momento que deseamos que la variable pasada como parámetro cambie el valor automáticamente en la variable del código llamante.

Para utilizar el paso por referencia pondremos el símblo ampersand & delante del parámetro de la función, esto hará que PHP interprete que el parámetro ocupa la misma dirección que la variable del código llamante, será como un "alias" dentro de la función.

NOTA: Desde PHP 6 los objetos se pasan por referencia sin necesidad de hacerlo explícitamente.

Tendremos especial cuidado con el uso de parámetros, ya que si el código llamante contiene 2 parámetros, la función tendrá también 2 parámetros, nunca menos, si no fuese así, PHP 6, producirá un mensaje de advertencia, activado desde el archivo php.ini mediante la activación de error_reporting. Una manera de omitir esta advertencia es colocando el símbolo arroba (@) delante del código llamante (expresión).
En caso de que la función tubiera más parámetros que la llamada, PHP 6 no produciria ningún tipo de mensaje o advertencia, únicamente se ignoran los atributos que exceden.

// Parámetro pasado por referencia (&) 

// Función (nombre en minúsculas)
function porReferencia( &$var ) {
    
	// Multiplico valor de $x por 2 
	$var = $var * 2;
	
	echo "Valor de $x pasado por referencia = " . $var;
	
}
	
	// Variable vale 100 
	$x = 100;
	echo "Valor inicial de $x = " . $x;
	
	// Llamada a función (nombre en mayúsculas) 
	PORREFERENCIA($x); // Ahora vale 200  

Valor inicial de $x = 100

Valor de $x pasado por referencia = 200

Subir

Parámetros predeterminados: Se trata de pasar como parámetro una variable con valor constante, la cual declaramos entre los paréntesis de la misma función. El valor predeterminado debe ser una expresión constante, nunca una variable, un miembro de una clase o una llamada a una función.

// Parámetros predeterminados
// La constante declarada se coloca al final 
function programar($peachepe, $achetemele = "HTML") {
	
	return "Saber programar con $achetemele y $peachepe.";

}
 
	echo programar("PHP"); // Valor para el primer parámetro  

Resultado con parámetros predeterminados:
Saber programar con HTML y PHP.

// Parámetros predeterminados 
function predeterminado($dis = "diseño"){
    
	return "Como hacer un $dis.";
	
}

	echo predeterminado(); // Recoge el valor de parámetro 
	echo predeterminado(null); // No recoge nada 
	echo predeterminado("programa"); // Recoge el valor llamante  

Como hacer un diseño. -> Sin parámetros

Como hacer un . -> Parámetro NULL

Como hacer un programa. -> Valor como parámetro

// Parámetros predeterminados
// Uso de arrays y del tipo especial NULL como valores predeterminados 
function predetArray($codigo = array("HTML"), $programacion = NULL) {
	
	// Si en la llamada no existen parámetros (NULL), entonces devuelve 'NotePat++' 
    $gestor = is_null ($programacion) ? "NotePat++" : $programacion;
	
	// Retorna parámetros separados por una coma (,) más el valor de la variable '$gestor' 
    return "Programar una web " . join(", ", $codigo) . " mediante $gestor. 
	     <br />";
	
}

	// Código llamante 
	echo predetArray();
	echo predetArray(array("HTML", "PHP"), "Dreamweaver CS6"); 

Llamada sin parámetros:
Programar una web HTML mediante NotePat++.

Llamada con parámetros:
Programar una web HTML, PHP mediante Dreamweaver CS6.

Subir

Listas de parámetros de longitud variable

PHP contiene soporte para listas de parámetros de longitud variable en funciones definidas por el usuario. PHP contiene las siguientes funciones para dar soporte a estas características.

func_num_args() Devuelve la cantidad de parámetros pasados en la función

// func_num_args() 
function numParam(){ 
	
	// Número de argumentos de la función 
    $numArgs = func_num_args();
    echo "Número de parámetros pasados: $numArgs  <br />"; // Devuelve 4 
	
}

// Llamada a función con 4 parámetros 
numParam(4, 14, 24, 34); 

func_num_args()

Número de parámetros de la función numParam: 4

Subir

func_get_arg(num) Devuelve un elemento de los parámetros de la función.

// func_get_arg(num) 
function recogeParam() { 
	
	// Número de argumentos de la función 
	$numArgs = func_num_args();
	
	echo "Número de parámetros de la función numParam: $numArgs <br />";
		
		if($numArgs >= 3){
			
		// Genera una advertencia si indicamos un número
		// de parámetros mayor que el número de 
		// parámetros pasados actualmente 
	echo "El tercer parámetro es el número: " . func_get_arg(2) . "<br /> ";
		 
     	}
	
}

// Llamada a función con 4 parámetros  
recogeParam(4, 14, 24, 34); 

func_get_arg(num)

Número de parámetros de la función numParam: 4
El tercer parámetro es el número: 24

La función func_get_arg() la podemos usar junto con la función func_get_args() y func_num_args(), esto permitirá a las funciones de usuario aceptar listas de parámetros de longitud variable.

Subir

func_get_args() Devuelve matriz con los parámetros de la función.

// func_get_args() 
echo "func_get_args()  <br /> <br />";

function recogeParam2(){ 
	
  // Número de argumentos de la función 
  $numArgs = func_num_args();
  echo "Número de parámetros de la función numParam: $numArgs <br />";
		
    if($numArgs >= 3){
			
    // Genera una advertencia si indicamos un número
    // de parámetros mayor que el número de 
    // parámetros pasados actualmente 
    echo "El cuarto parámetro es el número:" . func_get_arg(3) . "<br />";
		 
    }
		
	// Devolvemos la matriz de los parámetros de la función 
	$listParam = func_get_args();
	
	// 'array_sum()' devuelve la suma de todos los valores de una matriz 
	echo "Sumamos los parámetros:" . array_sum ($listParam) . " <br />";
	
	for ($x = 0; $x < $numArgs; $x++) {
		
		echo "El argumento $x es:" . $listParam[$x] . "<br />";
	
	}
	
}


// Llamada a función con 4 parámetros  
recogeParam(4, 14, 24, 34); 

func_get_args()

Número de parámetros de la función numParam: 4
El cuarto parámetro es el número: 34

Sumamos los parámetros: 76

Array de los parámetros de la función:
Parámetro 0 es el: 4
Parámetro 1 es el: 14
Parámetro 2 es el: 24
Parámetro 3 es el: 34

Subir

Retorno de valores (funciones)

Cuando queremos retornar un valor usaremos la sentencia return. Esta sentencia únicamente puede devolver un valor, pero puede ser un valor simple o incluidos arrays y objetos. Esto causa que la función finalice su ejecución inmediatamente y pase el control de nuevo a la línea desde la que fue llamada. La variable de retorno también puede ser una referencia a una variable mediante el operador ampersand (&).

Array como valor de retorno

// Retornar valores de una función como un Array 
function retornaArray(){
	
	$arr = array(10, 'veinte', 30);
    return $arr; // Retornar el valor del array 

}
	
	// Declarar variable para almacenar valores de tipo Array 
	$verArray = array();
	
	// Pasar los valores retornados de la función a la variable 
	$verArray = retornaArray();
		
		// Recorrer los valores 
		foreach ($verArray as $cla => $val) {
			
			echo $val;
			
		} 

Array como valor de retorno

Índice 0 /> 10
Índice 1 /> veinte
Índice 2 /> 30

Retorno de valores

// Retornar una lista de valores 
function iva($base, $porcen = 21){
   
   return $base * $porcen / 100;
   
}
	
	// Varias llamadas a una función
	
	// Calcula la base por el 2o parámetro de la función '$porcen = 21' 
	echo iva(100) . "<br />"; // Devuelve 21 
	// Calcula la base por '8' cambiando así el valor del 2o parámetro de la función 
	echo iva(100, 8) . "<br />"; // Devuelve 8  
	// Calcula la base por '0' cambiando así el valor del 2o parámetro de la función 
	echo iva(100, 0) . "<br />"; // Devuelve 0  

Retorno de valores

21% de 100 :> 21
8% de 100 :> 8
0% de 100 :> 0

Devolver una referencia desde una función
Podemos devolver una referencia a una variable, y no una copia, así hacer que la función pueda modificar la variable. Utilizaremos el símbolo ampersand como indicador de referencia, que irá colocado en la definición de la función "delante del nombre de la fución" y en la asignación en la llamada a la función.

// Devolver una referencia desde una función  
class objeto {
    
	public $unvalor = 100;

    public function &obtenerValor() {
        return $this -> val ;
    }
}

$obj = new objeto;
$elvalor = &$obj -> obtenerValor(); // '$elvalor' es una referencia a '$obj -> val', que es 100. 
$obj -> val = 20;
echo $elvalor; // Devuelve el nuevo valor de '$obj -> val', esto es, 20.  

Nuevo valor de la variable: 20

Subir