Más sobre funciones: paso de parámetros

  • Por
  • 03 de mayo de 2004
  • Valoración:
  • 9 Comentarios
  • Manuales de PHP
Este capítulo pretende ser una ampliación de detalles que atañen al artículo dedicado a las funciones en PHP.
Vamos a explicar algunos detalles adicionales sobre la definición y uso de funciones, para ampliar el artículo de funciones en php.

Paso de parámetros

Los parámetros son los datos que reciben las funciones y que utilizan para realizar las operaciones de la función. Una función puede recibir cualquier número de parámetros, incluso ninguno. A la hora de definir la función, en la cabecera, se definen los parámetros que va a recibir.

function f1 ($parametro1, $parámetro2)

Así definimos una función llamada f1 que recibe dos parámetros. Como se puede observar, no se tiene que definir el tipo de datos de cada parámetro.

Los parámetros tienen validez durante la ejecución de la función, es decir, tienen un ámbito local a la función donde se están recibiendo. Cuando la función se termina, los parámetros dejan de existir.

Los parámetros se pasan por valor

El paso de parámetros en PHP se realiza por valor. "Por valor" es una manera típica de pasar parámetros en funciones, quiere decir que el cambio de un dato de un parámetro no actualiza el dato de la variable que se pasó a la función. Por ejemplo, cuando invocamos una función pasando una variable como parámetro, a pesar de que cambiemos el valor del parámetro dentro de la función, la variable original no se ve afectada por ese cambio. Puede que se vea mejor con un ejemplo:

function porvalor ($parametro1){
$parametro1="hola";
echo "<br>" . $parametro1; //imprime "hola"
}

$mivariable = "esto no cambia";
porvalor ($mivariable);
echo "<br>" . $mivariable; //imprime "esto no cambia"


Esta página tendrá como resultado:

hola
esto no cambia

Paso de parámetros por referencia

En contraposición al paso de parámetros por valor, está el paso de parámetros por referencia. En este último caso, el cambio del valor de un parámetro dentro de una función sí afecta al valor de la variable original.

Podemos pasar los parámetros por referencia si, en la declaración de la función, colocamos un "&" antes del parámetro.

<?
function porreferencia(&$cadena)
{
$cadena = 'Si cambia';
}
$str = 'Esto es una cadena';
porreferencia ($str);
echo $str; // Imprime 'Si cambia'
?>


Este script mostrará por pantalla 'Si cambia'.

Parámetros por defecto

Podemos definir valores por defecto para los parámetros. Los valores por defecto sirven para que los parámetros contengan un dato predefinido, con el que se inicializarán si no se le pasa ningún valor en la llamada de la función. Los valores por defecto se definen asignando un dato al parámetro al declararlo en la función.

function pordefecto ($parametro1="pepe";$parametro2=3)

Para la definición de función anterior, $parametro1 tiene como valor por defecto "pepe", mientras que $parametro2 tiene 3 como valor por defecto.

Si llamamos a la función sin indicar valores a los parámetros, estos tomarán los valores asignados por defecto:

pordefecto () // $parametro1 vale "pepe" y $parametro2 vale 3

Si llamamos a la función indicando un valor, este será tenido en cuenta para el primer parámetro.

pordefecto ("hola") // $parametro1 vale "hola" y $parametro2 vale 3

Atención, estamos obligados a declarar todos los parámetros con valores por defecto al final.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Comentarios

Ricardo

29/12/2006
Hola Amigos

He tenido siempre una interrogante de programación dinámica y es si es que puedo programar todo mi sitio en solo una página como por ejemplo index.php y si eso traeria dificultades de trafico por la web o problemas de compilación con el servidor; además quisiera saber si es que esa página en el sitio podría crearse un directorio virtual como por ejemplo www.cualquiercosa.com/hola.php dependiendo del link al cual haga referencia ya que a veces creo que crear carpetas y hay colocar información de cada tema se hace algo tedioso.

Gracias

Chiquito

13/1/2010
Correcto
Muy claro, muy bien explicado.
Muchas gracias

neoweb

31/3/2011
¿Cuál es la diferencia entre pasar los parámetros por valor y por referencia?
Estuve probando los ejemplos que proponen para el paso de parámetros, y me asalta una duda. Siendo bien preciso y simplista, se supone que pasando los parámetros por valor, el valor del parámetro no cambia cuando se llama a la función. En cambio, si pasamos los parámetros por referencia, el valor sí debería cambiar. Es decir (al modo como lo entiendo yo), cuando se pasa por valor, la función devuelve la $variable contenida dentro de la misma; y cuando se pasa por referencia, devuelve la $variable que está fuera de la función.

Pero resulta que, viendo los ejemplos del artículo, el resultado es el mismo tanto si se pasan los parámetros por valor o por referencia. Me explico con los siguientes códigos:

PARÁMETROS POR VALOR:

function prueba1($variable_interna) {
$variable_interna="Variable dentro de la funci&oacute;n";
return $variable_interna;
}
$variable_externa="Variable fuera de la funci&oacute;n";
echo "<p>resultado= ".prueba1($variable_externa)."</p>";


PARÁMETROS POR REFERENCIA:

function prueba2(&$otra_variable_interna) {
$otra_variable_interna="Variable dentro de la funci&oacute;n";
return $otra_variable_interna;
}
$otra_variable_externa="Variable fuera de la funci&oacute;n";
echo "<p>resultado= ".prueba2($otra_variable_externa)."</p>";

Tanto elprimer como el segundo ejemplo devuelven la variable contenida dentro de la función, siendo que los parámetros de ambas son pasadas de diferentes maneras.

¿Cuál entonces es el sentido de usar una u otra forma (por valor o por referencia) si ambas devuelven la variable contenida dentro de la función?

Seguramente algo se me escapa; puede que esté equivocado y no haya entendido bien el asunto. Quisiera me ayuden a entenderlo, por favor.

neoweb

01/4/2011
ya entendí
ok ya lo entendí: yo pensaba que la variable o parámetro que debía cambiar al pasar parámetros por referencia era la que está dentro de la función. Ahora entiendo que la que cambia es la variable que está fuera de la función y que es pasada a la misma por referencia...

:D

themillonaire

31/5/2011
paso de parámetros
excelente...!

destradar

12/10/2011
Parametros de funcion
Por favor, podrían aclararme este texto que mencionan en su página sobre valores por defecto de parámetros

"Atención, estamos obligados a declarar todos los parámetros con valores por defecto al final"

¿Qué quiere decir, estamos o no estamos obligados a pasar parámetros con valores por defecto, y por qué dice al final?

Gracias

heman90

19/11/2011
Para neoweb
Neoweb, soy muy novato pero me parece que la diferencia es que en el codigo que pasaste, esta haciendo echo en lo que retornas de la funcion con el "return". Al ejemplo que diste, en ambos casos despues de haber ejecutado la variable, dale un echo a $variable_externa y otro echo a $otra_variable_externa. Repito, fijate que en el primer caso la variable "original", que seria la externa, no cambia y en el segundo si cambia. El tema es que al imprimir con el echo directamente a la funcion, imprimis el "return" pero no estas imprimiendo la variable original. Me explico? Estoy en lo correcto?
Saludos

pablo

29/3/2012
Yo opino
Yo opino que es bastante importante las funciones por referencia ya que en algun momento la necesitaremos para devolver el valor de 2 o mas variables o bien si en algun momento necesitamos que nuestras funciones cambien el valor de una variable en general.
Ahora bien mi pregunta es se puede utilizar un return dentro de una funcion con valores por ferencia ejem:

function myFuncion(&$a)
{
$a = 34;
return true;
}

frankkoq

06/8/2012
En parametros por defecto han puesto un punto y coma en vez de coma
aqui
function pordefecto ($parametro1="pepe", $parametro2=3)

Compartir