Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] dudas ambito variables en funciones anonimas php

Estas en el tema de dudas ambito variables en funciones anonimas php en el foro de PHP en Foros del Web. Hola, Tengo el siguente problema: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original function mi_funcion ( ) {         $variable = "valor1 valor2 valor3" ...
  #1 (permalink)  
Antiguo 04/03/2016, 19:14
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
dudas ambito variables en funciones anonimas php

Hola,

Tengo el siguente problema:

Código PHP:
Ver original
  1. function mi_funcion(){
  2.    
  3.     $variable = "valor1 valor2 valor3";
  4.    
  5.     $variable = preg_replace_callback('/valor2/',function($coincidencias)use($variable){
  6.        
  7.         //necesito cambiar aqui por otros criterios la palabra valor3 de la variable
  8.         $variable = str_replace("valor3","valor3_cambiado",$variable);
  9.    
  10.         //esto hace lo correcto cambia el valor2
  11.         return "valor2_cambiado";
  12.    
  13.     },$variable);
  14.    
  15.    
  16.     echo $variable;     //devuelve "valor1 valor2_cambiado valor3"  
  17.                             //deseado era "valor1 valor2_cambiado valor3_cambiado"
  18. };
  19.  
  20. $mi_funcion();

He intentado también declarando la variable $variable como global en las dos funciones pero tampoco funciona

¿Alguien tiene idea si esto se puede, tal como lo puse, o se me escapa a mi algo?

Bueno, haciendo otros chequeos por separado para el valor3 después de pasar primero por preg_replace_callback() se que se podría pero esto me daría bastante mas trabajo ya que la cosa es mucho mas compleja de como lo puse yo aquí.

Gracias
  #2 (permalink)  
Antiguo 04/03/2016, 19:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: dudas ambito variables en funciones anonimas php

Te recuerdo que todas las variables en PHP (excepto objetos) son pasadas como copias, si necesitas alterar también la variable de entrada (que no suena muy recomendable) debes pasarla por referencia, consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 04/03/2016, 20:20
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: dudas ambito variables en funciones anonimas php

Gracias por la pista (no es que me habia olvidado pero nunca he pasado algo por referencia. Lo poco que aprendi ha sido por cositas que he hecho ... algo del manual he leido ... pero no entero ) ...

Ok volviendo al problema
sigue sin funcionar ... segun el manual simplemente al poner el & delante de la variable deberia poder ser modificada desde dentro de una funcion pero en mi caso no funciona :( .

Lo que no encuentro ejemplos en el manual es que en mi caso dicha variable esta pasada dos veces como parametros primero para preg_replace_callback y luego para la funcion anonima que a su vez es un parametro para preg_replace_callback .

Entonces si he puesto &$variable en la anonima sigue igual ... la variable de fuera no guarda las modificaciones

$i pongo tambien ( o solo ) en el ultimo parametro del preg_replace_callback &$variable me salta este error :
Fatal error: Call-time pass-by-reference has been removed in ....php on line 99 que en mi ejemplo que puse arriba seria en la linea 13 ... ja ja el jodido 13 :D

¿Algun otra sugerencia?

Gracias pateketrueke
  #4 (permalink)  
Antiguo 04/03/2016, 20:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: dudas ambito variables en funciones anonimas php

Cita:
Fatal error: Call-time pass-by-reference has been removed in ....php on line 99
Efectivamente la cosa radica en cómo la uses, sin ver cómo es el código que usaste es complicado.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 04/03/2016, 20:36
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: dudas ambito variables en funciones anonimas php

No no,
El codigo lo he probado tal cual lo puse al principio
pero no quise ponerlo otra vez por que soalmente ha cambiado el signo &


O sea asi sigue igual .. no se guarda el cambio de la variable de fuera:
Código PHP:
Ver original
  1. function mi_funcion(){
  2.    
  3.     $variable = "valor1 valor2 valor3";
  4.    
  5.     $variable = preg_replace_callback('/valor2/',function($coincidencias)use(&$variable){
  6.        
  7.         //necesito cambiar aqui por otros criterios la palabra valor3 de la variable
  8.         $variable = str_replace("valor3","valor3_cambiado",$variable);
  9.    
  10.         //esto hace lo correcto cambia el valor2
  11.         return "valor2_cambiado";
  12.    
  13.     },$variable);
  14.    
  15.    
  16.     echo $variable;     //devuelve "valor1 valor2_cambiado valor3"  
  17.                             //deseado era "valor1 valor2_cambiado valor3_cambiado"
  18. };
  19.  
  20. mi_funcion();


Y el error salta si hago esto:
Código PHP:
Ver original
  1. function mi_funcion(){
  2.    
  3.     $variable = "valor1 valor2 valor3";
  4.    
  5.     $variable = preg_replace_callback('/valor2/',function($coincidencias)use(&$variable){
  6.        
  7.         //necesito cambiar aqui por otros criterios la palabra valor3 de la variable
  8.         $variable = str_replace("valor3","valor3_cambiado",$variable);
  9.    
  10.         //esto hace lo correcto cambia el valor2
  11.         return "valor2_cambiado";
  12.    
  13.     },&$variable); // !!!!!!!!!!!! aqui es la linea donde salta el error !!!!!!!!!!!!!!!!!!!
  14.  
  15.  
  16.    
  17.    
  18.     echo $variable;     //devuelve "valor1 valor2_cambiado valor3"  
  19.                             //deseado era "valor1 valor2_cambiado valor3_cambiado"
  20. };
  21.  
  22. mi_funcion();

El ejemplo lo tengo aislado o sea no hay ningun otra cosa que interfiere. solamente ejecuto esto. Ningun otra cosa PHP

Última edición por matake; 04/03/2016 a las 20:42
  #6 (permalink)  
Antiguo 04/03/2016, 20:55
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: dudas ambito variables en funciones anonimas php

Ahora que lo pienso, lo que sucede es que el callback (tu función) se ejecuta antes de finalizar preg_replace_callback(), ahí si se aplica el cambio pero al finalizar la función se aplica el cambio nuevamente y se pierde el reemplazo.

Es decir, hay una contradicción lógica que impide que se apliquen ambos cambios.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 04/03/2016, 21:04
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: dudas ambito variables en funciones anonimas php

Ok. Gracias por tu tiempo.

Por lo menos aprendi algo que me va a servir en otras circumstancias. (lo de pasar por referencia )

Entonces intentare hacerlo de otra forma.

Saludos y que pases un buen dia

Etiquetas: ambito, dudas, funciones, variable, variables
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 02:15.