Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Retornar array por referencia

Estas en el tema de Retornar array por referencia en el foro de PHP en Foros del Web. Buenas... estoy tratando de reproducir algo que vi por ahi pero no me funciona : basicamente no puedo "retornar array por referencia" Código PHP: <?php ...
  #1 (permalink)  
Antiguo 16/04/2014, 23:51
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Pregunta Retornar array por referencia

Buenas... estoy tratando de reproducir algo que vi por ahi pero no me funciona : basicamente no puedo "retornar array por referencia"


Código PHP:
<?php

# It's class in really more than a function
function &globals(){
    
$__dictionary=['apples'=>5,'oranges'=>7,'bananos'=>9];
    return 
$__dictionary;        
}

echo 
globals()['oranges'];
# 7

$x = &globals();
$x['oranges'] = 11;

# deberia cambiar e imprimir 11 pero...
echo globals()['oranges'];
# 7

Que hago mal ? gracias
__________________
Salu2!
  #2 (permalink)  
Antiguo 17/04/2014, 00:54
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Retornar array por referencia

En cada llamada a la función se vuelve a asignar $_dictionary, creo que deberías declararla como variable estática y listo.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 17/04/2014, 06:19
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Retornar array por referencia

Cita:
Iniciado por Triby Ver Mensaje
En cada llamada a la función se vuelve a asignar $_dictionary, creo que deberías declararla como variable estática y listo.
Hola compa.......!


Si... se vuelve a asignar porque no es la implementacion completa

(en realidad globals es una clase y $__dictionary un atributo y hay un metodo setter tambien)

y solo quiero simular algo que vi en otro lenguaje.


En definitiva me interesa devolver por referencia el array, sera que se puede sin que el array sea parametro ?
__________________
Salu2!
  #4 (permalink)  
Antiguo 17/04/2014, 06:32
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Retornar array por referencia

A lo que se refiere triby es a esto
Código PHP:
Ver original
  1. <?php
  2. function &globals() {
  3.     static $__dictionary = [
  4.         'apples'  => 5,
  5.         'oranges' => 7,
  6.         'bananos' => 9,
  7.     ];
  8.  
  9.     return $__dictionary;
  10. }
  11.  
  12. echo globals()['oranges'];
  13.  
  14. $x            = &globals();
  15. $x['oranges'] = 11;
  16.  
  17. echo globals()['oranges'];

Mira donde está el static y te va resultar como lo estás pidiendo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 17/04/2014, 06:45
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Retornar array por referencia

@abimaelrc: si que pena...... no entendi la verdad la respuest de @Triby que era mas que acertada!

Es que me quede con la idea de que debia retornar el puntero haciendo:

Cita:
return &$__dictionary;
Creo recordar eso de C/C++ pero el lenguaje no me dejó y luego se me olvido que ya no tenia como decirle al interprete que ese arreglo iba por referencia!!!

Evidentemente como no existe el tipo puntero como tal, lo simple se vuelve mas enredado


Cita:
Iniciado por Triby Ver Mensaje
En cada llamada a la función se vuelve a asignar $_dictionary, creo que
deberías declararla como variable estática y listo.
Excelente!!! gracias compa!!!
__________________
Salu2!

Última edición por Italico76; 17/04/2014 a las 07:14

Etiquetas: arreglo, diccionario, referencia
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 13:01.