Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/11/2007, 16:01
javi_bus
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 20 años, 3 meses
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.