Foros del Web » Programando para Internet » PHP »

que significado tiene esto: $$link

Estas en el tema de que significado tiene esto: $$link en el foro de PHP en Foros del Web. Buenas!!! estoy revisando el codigo de oscommerce y hay una parte de funciones de las cuales se encuentra la de conexión de esta manera: Código: ...
  #1 (permalink)  
Antiguo 22/11/2007, 08:03
 
Fecha de Ingreso: junio-2006
Mensajes: 330
Antigüedad: 13 años, 8 meses
Puntos: 4
que significado tiene esto: $$link

Buenas!!! estoy revisando el codigo de oscommerce y hay una parte de funciones de las cuales se encuentra la de conexión de esta manera:

Código:
function tep_db_connect($server = DB_SERVER, $username = DB_SERVER_USERNAME, $password = DB_SERVER_PASSWORD, $database = DB_DATABASE, $link = 'db_link') {
    
    global $$link;

    if (USE_PCONNECT == 'true') {
      $$link = mysql_pconnect($server, $username, $password);
    } else {
      $$link = mysql_connect($server, $username, $password);
    }

    if ($$link) mysql_select_db($database);

    return $$link;
  }
Mi pregunta es que significado tiene $$link? por qué lo expresan de esta manera?

Si alguien me ayuda por favor...

Gracias!!!
  #2 (permalink)  
Antiguo 22/11/2007, 08:45
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: que significado tiene esto: $$link

Hola,

Cuando se escribe $$variable se hace referencia a una variable con el nombre $variable. Me explico un poco mejor con un ejemplo:

Código PHP:
$variable 'prueba';
$
$variable 'hola'
Equivale a...

Código PHP:
$prueba 'hola'

En la primera linea no hay dudas (a $variable le damos el valor 'prueba'). En la segunda estamos asignando el valor 'hola' a la variable $prueba, es decir, como $variable = 'prueba', $$variable es lo mismo que $prueba.

No sé si se entiende.

Un saludo
  #3 (permalink)  
Antiguo 22/11/2007, 08:54
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 14 años, 11 meses
Puntos: 33
Re: que significado tiene esto: $$link

Es muy buena la explicación que te da javis_bus, en resumen el nombre de tu variable va a ser igual al valor que le fue asignado a dicha variable.

Esto queda ejemplificado en el ejemplo que te pone mi compañero

Código PHP:
$variable 'prueba';
$
$variable 'hola';
//Ahora tienes una variable con el nombre de "prueba" la cual tiene valor de "hola" 
Cualquier duda hazla saber


Saludillos.
  #4 (permalink)  
Antiguo 22/11/2007, 09:31
 
Fecha de Ingreso: junio-2006
Mensajes: 330
Antigüedad: 13 años, 8 meses
Puntos: 4
Re: que significado tiene esto: $$link

OK!! muchisimas Gracias!!! he comprendido, pero quisiera preguntar otra cosilla, he leído por ahí con la gran ayuda de google que no es recomendable utilizar variables globales porque relantiza la ejecución del script, eso es cierto? Es que bueno quisiera optimizar mi programación, mis script, por lo tanto he buscado por google cosas referente al tema.

Bueno, si tienen alguna página que me pueda servir para mejorar mi código se lo agradecería...

Gracias por responder...
  #5 (permalink)  
Antiguo 22/11/2007, 16:01
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: que significado tiene esto: $$link

No sé realmente si usar variables globales ralentiza el sistema. Supongo que depende de como se usen. Yo no me obsesionaría demasiado. Además no todo es optimización; también importa la claridad del código para su mantenimiento. Es decir, que hay que jugar un poco con ambos y buscar el equilibrio, cosa que es diferente para cada persona.

Yo personalmente, en programación estructurada (usando funciones, no objetos), prefiero pasar los datos a la función antes que utilizar un "global $variable" (aunque no descarto las variables globales en algunos casos). En general, le da más claridad al código y permite la reutilización de funciones para más cosas ya que actúan con lo que le pasas, no con las variables que hayas declarado globales.

Los puntos que yo considero:
  • Para pasarle variables, no hay límite. Además se pueden pasar arrays de variables. Si hay muchas que pasarle, ya es cosa de estudiar cada caso concreto para ver si declarar alguna como global o cómo hacerlo.
  • Para obtener la respuesta de la función, se puede hacer con el "return $variable". Si la respuesta consiste en un solo valor, no hay problema (se llama a la función con un "$resultado = funcion($valor_que_le_paso);"). Si hay varios resultados que debemos "sacar" de la función, hay dos vías sin considerar el uso de variables globales:
    • Retornar un array que contenga todos los valores.
    • Pasar variables por referencia, de modo que los cambios que se hagan a esas variables dentro de la función, permanecen fuera.

Esto da para muchas lineas y, además, no llegaríamos a nada porque cada uno tiene su metodología. Lo mejor es que hagas lo que más te guste pensando en poder entender el código si lo vuelves a revisar dentro de una semana o 10 años. El uso indiscriminado de variables globales dificulta la comprensión del código y, posiblemente, empeore algo el rendimiento (cuanto, dependerá de la aplicación y cuanto se abuse, pero normalmente, no creo que apenas se note).

Un saludo

P.D.: en esa función del oscommerce, no entiendo qué sentido tiene esto:

Código PHP:
function tep_db_connect($server DB_SERVER$username DB_SERVER_USERNAME$password DB_SERVER_PASSWORD$database DB_DATABASE$link 'db_link') {
    
    global $
$link;

    [...]

    return $
$link;
  } 
¿Para qué declara global la variable $$link si luego la retorna a quien llamó a la función con el return $$link? O se hace de un modo o de otro, pero los dos es una tontería.
  #6 (permalink)  
Antiguo 22/11/2007, 18:43
 
Fecha de Ingreso: agosto-2006
Mensajes: 29
Antigüedad: 13 años, 6 meses
Puntos: 0
Re: que significado tiene esto: $$link

http://en.wikipedia.org/wiki/Reflection_%28computer_science%29

Ahi te explica lo que estas preguntando.
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 12:17.