Diferencia entre revisiones de «Programación en PHP/Funciones»

Contenido eliminado Contenido añadido
Wutsje (discusión | contribs.)
m Revertidos los cambios de 201.116.114.165 (disc.) a la última edición de 200.45.59.241
Santhy (discusión | contribs.)
Sin resumen de edición
Línea 1:
Las funciones son rutinas creadas por el programador para realizar procesos que se repetirán o se usarán más de una vez. Las funciones pueden ser n-paramétricas (con n ≥ 0), y estos parámetros pueden ser de entrada, de salida o de entrada y salida; aunque PHP no hace esta distinción del modo en que, por ejemplo, [[Ada]] ([[wp:Ada|ver en Wikipedia]]), sí lo hace.
'''Funciones Simples.'''
 
{{CodigoPHP:Tip|En PHP, todas las funciones devuelven un valor. Aquellas que no devuelvan uno explícitamente, devuelven '''NULL''', siguiendo el principio de que ''todo en PHP es una expresión''.}}
Las funciones son rutinas creadas por el programador para realizar procesos que se repetirán o se usarán más de una vez. Existen funciones simples (sin parámetros de por medio), y funciones con envío de parámetros, los cuáles se pueden procesar según su valor.
 
= Introducción =
Esta sería una llamada a una función simple:
 
Esta sería una llamada a una función sin parámetros:
 
<source lang="php">
Línea 24 ⟶ 26:
</source>
 
EstoEl hacecódigo superior ejecuta una llamada a la función <pre>Hola()</pre>, que imprimirá el texto "Hola amigo".
 
 
'''Funciones con envío de parámetros.'''
 
Si necesitas una función a la cuál le puedas pasar parámetros, seríase escribiría del mismo modo, con el nombre de los parámetros entre los paréntesis, separados por comas. Para una función biparamétrica, el código podría ser algo como:
 
{{CodigoPHP:Codigo|Función suma|<source lang="php">
<?php
function Hola2suma($saludoa, $b){
return $a + $b;
echo $saludo;
}
$a = 1; $b = 2;
echo "Sumemos $a + $b = " . suma($a, $b);
?>
</source>|Resultado|Sumemos 1 + 2 = 3}}
<html>
<head>
<title>Mi Página</title>
</head>
<body>
<?php
Hola2("Este es el segundo saludo");
?>
</body>
</html>
</source>
 
Nótese que en este ejemplo hemos utilizado la palabra clave '''return'''. Esta palabra sirve para que la función devuelva valores al lugar en dónde se haya llamado.
Esto imprimirá: "Este es el segundo saludo". Note las posibilidades dinámicas en operaciones matemáticas o de texto que se pueden lograr "personalizando" el contenido de los valores a enviar.
 
A efectos prácticos digamos que la función se ejecuta en un entorno separado y se "sustituye" en tiempo de ejecución por el resultado devuelto por return en el contexto en el que se había llamado. En el ejemplo anterior, sumar($a, $b) === 3 (siendo === el operador de identidad).
Otro Ejemplo:
 
== Parámetros por defecto ==
<source lang="php">
En la definición formal de la función se pueden especificar parámtros por defecto, de tal modo que si no se pasa uno en el momento de llamarla, el parámetro toma un valor. Si este valor no se especifica, el intérprete devolverá un error en tiempo de ejecución por número de parámetros inválido.
function Suma($a, $b)
{
$resultado=$a+$b;
echo $resultado;
}
</source>
 
Para especificarlos, se hace así:
Si hicieramos:
{{CodigoPHP:Codigo|Ejemplo de parámetros por defecto|<source lang="php">
<source lang="php"><?php Suma(20,30);?></source>
function test($parametro = 'valor') {
El resultado sería 50.
/* operaciones */
<source lang="php"><?php Suma(15,4);?></source>
return $parametro
El resultado sería 19, y así.
}
</source>}}
 
= Sobrecarga de funciones =
 
Desde PHP4<ref name="overload1" group="Nota">El autor no recuerda desde qué versión mínima, pero seguro que en PHP5 en todas</ref>, se pueden ''sobrecargar'' funciones, esto es, definir funciones que aceptan distintos parámetros y puedan tener una lógica interna diferente.
Desde PHP4, se puede utilizar una función del tipo
 
Una función sobrecargada puede ser algo como:
<source lang="php">
{{CodigoPHP:Codigo|Primer intento|<source lang="php">
function abc() {
function overload() {
}
return array(1);
</source>
}
 
function overload($a) {
y utilizar la función de PHP {{manual_php|func_get_args}}, de esta forma:
return array(2, $a);
}
 
function overload($a, $b) {
<source lang="php">
return array(3, array($a, $b));
function abc() {
}
$array = func_get_args();
$arrayn = count($array);
for($i = 0; $i < $arrayn; $i++) {
echo "Se utilizó como parámetro $i : {$array[$i]}";
}
}
</source>
 
function oveload($a, $b, $c) {
O de éste modo:
return array(4, array($a, $b, $c));
}
</source>}}
 
Falta decir que desde PHP5<ref name="overload1" group="Nota" /> las funciones sin parámetros especificados (con una lista vacía), pueden recibir cualquier número arbitrario de parámetros. La lista de funciones anteriores podría reescribirse como una sola, del siguiente modo:
<source lang="php">
 
{{CodigoPHP:Codigo|Mejor aproximación|<source lang="php">
function not_overloaded() {
return array(</source>
{{manual_php|func_num_args|func_num_args()}},
 
{{manual_php|func_get_args|func_get_args()}}
<source lang="php">);
}</source>}}
 
Un ejemplo que muestra los parámetros utilizados, típico en los libros, es el siguiente:
 
{{CodigoPHP:Codigo|function abc|<source lang="php">
function abc() {
$array = func_get_args();
for($iarrayCount = 0; $i < count($array); $i++) {
for($i = 0; $i < $arrayCount; $i++) {
echo "Se utilizó como parámetro $i : {$array[$i]}";
}
}
</source>}}
 
Al llamar{{CodigoPHP:CodigoSalida|Llamada a la función conabc|
<source lang="php">abc('test', 'test2', 3, 4);</source>
|Resultado|
ésta devolvería:
<source lang="text">
Se utilizó como parámetro 0 : test
Línea 106 ⟶ 113:
Se utilizó como parámetro 2 : 3
Se utilizó como parámetro 3 : 4
</source>}}
</source>. Por tanto se pueden definir parámetros en tiempo de ejecución.
 
También se pueden crear funciones anónimas en tiempo de ejecución. Estas funciones son muy útiles en el lambda-cálculo, y se crean con {{manual php|create_function}}, con un string en el segundo parámetro que sería el código PHP que debe de realizar la función.
En PHP6 se introduce un nuevo estilo de funciones anónimas que permite además asignar funciones a variables, así como se hace en otros lenguajes como JavaScript.
 
De este modo, el siguiente código sería válido '''en PHP6 o superior'''.
 
{{CodigoPHP:Codigo|Código experimental|<source lang="php"> $a = function($b) { return $b; };
if($a(45) == 45) echo "Bien!"; // Se imprime 'Bien!'</source>}}
 
= Notas =
<references group="Nota" />