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.
Las funciones de PHP se clasifican en tres tipos:
Funciones nativas del lenguage: Son las que se utilizan con matrices y cadenas.
SubirFunciones 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.
SubirFunciones definidas por el usuario: Se trata de las funciones que creamos como usuarios, son personalizadas para resolver un problema propio de nuesto código.
SubirFunció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.
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
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
SubirPará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 Llamada sin parámetros: 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() func_get_arg(num) Devuelve un elemento de los parámetros de la función. func_get_arg(num) 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. func_get_args() Devuelve matriz con los parámetros de la función. func_get_args() 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 Array como valor de retorno Retorno de valores Retorno de valores Devolver una referencia desde una función Nuevo valor de la variable: 20
// 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");
Programar una web HTML mediante NotePat++.
Llamada con parámetros:
Programar una web HTML, PHP mediante Dreamweaver CS6. Listas de parámetros de longitud variable
// 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);
Número de parámetros de la función numParam: 4 // 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);
Número de parámetros de la función numParam: 4
El tercer parámetro es el número: 24 // 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);
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
Retorno de valores (funciones)
// 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;
}
Índice 0 /> 10
Índice 1 /> veinte
Índice 2 /> 30
// 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
21% de 100 :> 21
8% de 100 :> 8
0% de 100 :> 0
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.