Autor Tema: [AYUDA] No entiendo este código  (Leído 470 veces)

Desconectado WildWolf360

  • PHPer@ Fijo
  • ***
  • Mensajes: 192
  • Karma: 8
    • Ver Perfil
[AYUDA] No entiendo este código
« en: 11 de Mayo de 2010, 21:43:38 pm »
Hola muy buenas. Me he encontrado este código, y no lo entiendo para nada:

<?php
$foo 
= &#39;Bob&#39;;
$bar = &$foo;
$bar "Mi nombre es $bar";
echo 
$foo;
echo 
$bar;
?> 


El resultado es Mi nombre es BobMi nombre es Bob, lo que no entiendo es para qué se usa el &, ni cómo permite que haya dos varibales iguales ($bar y $bar).

¿Podríais explicarme esto por favor?

Un Saludo

Comunidad PHPeros

[AYUDA] No entiendo este código
« en: 11 de Mayo de 2010, 21:43:38 pm »

Desconectado Rodrinete

  • PHPer@ Fijo
  • ***
  • Mensajes: 222
  • Karma: 6
    • Ver Perfil
Re:[AYUDA] No entiendo este código
« Respuesta #1 en: 11 de Mayo de 2010, 22:21:12 pm »
Más o menos, el & se utiliza para que las dos variables sean iguales...

Por ejemplo


<?php
$a 
1;
$b = &$a;
echo 
$a# 1
echo $b# 1
$a 80;
echo 
$b#80
?>


En tu caso, el $bar = &$foo hace que las dos tengan el mism valor, y si se cambia una ($bar = "Mi nombre es $bar") la otra tambien se cambia.


Esto se suele usar en funciones que devuelven variables externas, ejemplo:


<?php
function saludo($nombre, &$resultado) {
 
$resultado "Hola {$nombre}";
}
saludo("WildWolf360"$saludo); #$saludo y &$resultado(funcion) tendrian el mismo valor
echo $saludo#Hola WildWolf360
?>


No se si te has enterado muy bien, si no contestame.

Saludos!

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:[AYUDA] No entiendo este código
« Respuesta #2 en: 12 de Mayo de 2010, 05:03:53 am »
Gracias por la explicación Rodri... el de la duda era él y terminé entendiendo hasta yo xD
Karma+ ;)

Saludos.
- Moderador de PHP


Desconectado WildWolf360

  • PHPer@ Fijo
  • ***
  • Mensajes: 192
  • Karma: 8
    • Ver Perfil
Re:[AYUDA] No entiendo este código
« Respuesta #3 en: 12 de Mayo de 2010, 13:06:26 pm »
Más o menos, el & se utiliza para que las dos variables sean iguales...

Por ejemplo


<?php
$a 
1;
$b = &$a;
echo 
$a# 1
echo $b# 1
$a 80;
echo 
$b#80
?>


En tu caso, el $bar = &$foo hace que las dos tengan el mism valor, y si se cambia una ($bar = "Mi nombre es $bar") la otra tambien se cambia.


Esto se suele usar en funciones que devuelven variables externas, ejemplo:


<?php
function saludo($nombre, &$resultado) {
 
$resultado "Hola {$nombre}";
}
saludo("WildWolf360"$saludo); #$saludo y &$resultado(funcion) tendrian el mismo valor
echo $saludo#Hola WildWolf360
?>


No se si te has enterado muy bien, si no contestame.

Saludos!

Joder no lo entiendo... ¿Pero para qué puede llegar a usarse? Esque me cuesta más hacer esto que hacer 2 variables diferentes y listo...

Lo siento, pero no entiendo qué finalidad puede tener esto, o para qué sirve. ¿Podríais volver a explicármelo por favor?

Un Saludo y muchas gracias

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[AYUDA] No entiendo este código
« Respuesta #4 en: 12 de Mayo de 2010, 16:25:23 pm »
Hola, no se si has escuchado hablar de los punteros en C++.
Esto es algo parecido.

& en las variables sirve para hacer referencia a otra. Es como tener dos cosas con el mismo nombre.
Vamos a algo mas teorico: Sabemos que lo que guardas en variables se guarda en la memoria RAM del servidor, y así el script lo tiene siempre en memoria para usarla. ¿Eso lo sabías no? Cuanta mas variables, mas memoria RAM consume. Es decir, si yo tengo $var = "hola" en un script, la cadena "Hola" se guarda en la memoria RAM.

Cada parte de la memoria RAM tiene una identificacion, una posición. Imaginemos que cuando tu haces:
$var = "Hola"
La cadena "Hola" se guarda en la posición de memoria 0x0000001, la primera posición. Por lo tanto, teoricamente, lo que la variable $var esta guardando no es la cadena "Hola", lo que la variable $var guarda es la posición de memoria donde esta esa información.
Para que cuando tu hagas:
$var = "Hola de nuevo";
Lo que le dice al ordenador es:
"Escucha, en la posición de memoria 0x0000001 hay una información, pero ya no es útil, ahora quiero que en esa posición de memoria guardes la cadena 'Hola de nuevo'"

Partiendo de eso, de que las variables guardan posiciones de memoria y no información, es fácil saber que hace el cáracter &.
Simplemente se refiere a la posición en la memoria.

Por lo tanto, si tu haces:
$a = "hola";
$b = &$a;
$a = "adios";
echo $b;

Lo que saldra en pantalla es "adios", ya que ahora $a y $b señalan a la misma posición de memoria, y por lo tanto a la misma cosa.

Utilidad: la que tu quieras darle, desde llamar a la misma variable con dos nombres hasta crear funciones del tipo que tu has puesto en tu ultimo mensaje, no se me ocurre ninguna mas ahora mismo.

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado WildWolf360

  • PHPer@ Fijo
  • ***
  • Mensajes: 192
  • Karma: 8
    • Ver Perfil
Re:[AYUDA] No entiendo este código
« Respuesta #5 en: 12 de Mayo de 2010, 18:08:58 pm »
OK gracias TLX, ahora lo he entendido al a perfección.


Muchas gracias y un saludo

Desconectado Siquillote

  • PHPero Master
  • ******
  • Mensajes: 4.229
  • Karma: 179
  • Sexo: Masculino
    • Ver Perfil
Re:[AYUDA] No entiendo este código
« Respuesta #6 en: 12 de Mayo de 2010, 19:39:20 pm »

Yo tampoco lo entendía mucho, pero lo que doy a entender es que lo que hace es librar RAM del servidor ¿No es así?. Si es así, yo le veo mucha utilidad por ejemplo al usar if. Un ejemplo sería este :


<?php
if($phperos "Hola"){
$a "Hola phperos"
echo 
$a;
} else {
$b= &$a;
echo 
$a;

?>

#Fdo. Physlet

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[AYUDA] No entiendo este código
« Respuesta #7 en: 12 de Mayo de 2010, 20:42:20 pm »
Yo tampoco lo entendía mucho, pero lo que doy a entender es que lo que hace es librar RAM del servidor ¿No es así?. Si es así, yo le veo mucha utilidad por ejemplo al usar if. Un ejemplo sería este :


<?php
if($phperos "Hola"){
$a "Hola phperos"
echo 
$a;
} else {
$b= &$a;
echo 
$a;

?>

;D El sólo dió un ejemplo de como sería en C++, en php no es así..
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[AYUDA] No entiendo este código
« Respuesta #8 en: 12 de Mayo de 2010, 20:43:06 pm »
No, para nada, no lo has entendido, no tiene nada que ver con liberar ram del servidor.
Simplemente lo que hace es referencia a la dirección de memoria de una variable, asi que si
$b = &$a entonces $b señala a la misma dirección de memoria que $a, y por lo tanto son como espejos, lo que pasa en $a pasa en $b, porque señalan la misma cosa, y viceversa.

Además, tu código no tiene sentido, si tu if es TRUE declaras $a, pero si tu if es FALSE, haces uso de $a pero sin embargo $a no estará definida porque se define si el if es TRUE.

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es