Foros del Web » Programando para Internet » PHP »

Variables por referencia y funciones

Estas en el tema de Variables por referencia y funciones en el foro de PHP en Foros del Web. Tengo la siguiente función: Código PHP: function  g ( $a ,& $b ){   $b = 'holaaa' ; } g ( 1 ); echo  $b ...
  #1 (permalink)  
Antiguo 13/02/2005, 09:56
Avatar de thunder-ion  
Fecha de Ingreso: diciembre-2004
Mensajes: 106
Antigüedad: 13 años
Puntos: 0
Exclamación Variables por referencia y funciones

Tengo la siguiente función:

Código PHP:
function g($a,&$b){
 
$b='holaaa';
}
g(1);
echo 
$b
Resulta que no quiero escribir cada vez g(1,$b) para decirle a PHP que la variable por referencia es $b, sino quiero que este asignado ya por defecto, y que luego me imprima.

El caso es que no consigo hacerlo por defecto, y para que la función funcione correctamente tengo que pasar cada vez la variable g(1,$b).

Alguien sabe como puedo solucionarlo?

Graciasss
  #2 (permalink)  
Antiguo 13/02/2005, 18:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No sé si entendí bien pero ..

Podrías definir tu $g como variable global, De hecho es asì como debes hacerlo para tu ejemplo:

Código PHP:
$b='hola';

function 
g($a){ 
global 
$b;
$b .=" blabla"

g(1); 
echo 
$b
Tambièn puedes pre-definir un valor por defecto, el cual se usará si no indicas un valor expresamente:
Código PHP:
function g($a,$b='holaa'){ 
return 
$b

echo 
g(1)."<br>"
echo 
g(1,"blabla"); 
Como veras .. se hace un "return" de $b para obtener su valor a no ser que lo declares como "global" para usarlo como pretendes.

Un saludo,
  #3 (permalink)  
Antiguo 14/02/2005, 07:47
Avatar de thunder-ion  
Fecha de Ingreso: diciembre-2004
Mensajes: 106
Antigüedad: 13 años
Puntos: 0
El segundo ejemplo se acerca mas a lo que busco.

Me intentaré exprersar un poco mejor, ayer estaba poco inspirado .

Tengo la función function g($a,&$b), donde la variable &$b es por referencia, es decir, si paso g(1,$otra_variable) $otra_variable cojera el valor de $b, que en mi ejemplo es 'holaaa', sin necesidad de retornarla. Por lo que esto imprimirá 'holaaa':

Código PHP:
function g($a,&$b){
 
$b='holaaa';
}
g(1,$otra_variable);
echo 
$otra_variable
Mi problema es que no quiero pasar la variable $otra_variable cada vez que llame la función, sino que lo haré solo cuando me interese almacenar algunos datos en la variable X.

La función eregi tiene algo de esto, si quieres que te retorne en un array el resultado pones el nombre de la variable, sino lo dejas vacio y no almacena nada en ninguna variable solo retorna true o false. Yo lo quiero conseguir el es el mismo efecto, que el segundo argumento sea opcional... Creo que tu segundo ejemplo es la solución, pero no estoy seguro. ¿Quiza deba asignar un valor, y sino no cambia significa que no quiero almacenar nada en una variable?

Espero haberme expresado mejor, llevo unos días muy malos.

Saludosssss
  #4 (permalink)  
Antiguo 14/02/2005, 10:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. otras funciones de "funciones" son las del tipo:

http://www.php.net/manual/es/ref.funchand.php

Con esas funciones puedes obtener por ejemplo el n° de parámetros que pasas a una función y sus valores, así que no dependes de un valor por defecto y obligatorio sino que -tu- bajo la estructura de tu función defines cosas como "el 1er parámetro es tal cosa, el segundo si existe es tal cosa" y así sucesivamente.

De todas formas .. también requieres hacer un "return" que tu lógica de esa función ya verá si devuelve un "true" o un "false" (boolean) o bien algún valor .. ya sea en forma de variable simple o un array. A su vez ese valor habría que declararlo como global de alguna forma .. Revisa los ejemplos de esas funciones sobre "funciones".

Un saludo,
  #5 (permalink)  
Antiguo 14/02/2005, 13:46
Avatar de thunder-ion  
Fecha de Ingreso: diciembre-2004
Mensajes: 106
Antigüedad: 13 años
Puntos: 0
hecharé un vistazo haber que puedo hacer.

Gracias por tu ayuda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:26.