[Pregunta]: Modificar la variable original en PHP

Iniciado por Leguim, 30 Marzo 2021, 18:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

Hola,

tengo 2 archivos PHP donde en el primer archivo tengo definida una función:
Código (php) [Seleccionar]

function myFunction($variable)
{
      $variable = 3;
}




En mi segundo archivo PHP tengo definida $variable (no es un parámetro como antes), y una llamada a myFunction()
Código (php) [Seleccionar]

$variable = 7;
myFunction($variable); // entonces le mando por parámetro la variable a la que le quiero modificar el valor


Entiendo que con return en la función y $variable = myFunction($variable); asunto arreglado pero necesito hacerlo de esta forma (si es que se puede).

Capaz usando global $variable o algo así, se pueda hacer algo...

#!drvy

Puedes hacerlo con global o pasando el parametro como referencia. Los globals se desaconsejan TOTALMENTE y son mala práctica. No hay ni un caso contado donde tenga sentido usar global. Las funciones que modifican cosas fuera de su scope tampoco se recomiendan y también se consideran mala práctica, aunque en PHP no es tan mal visto porque el propio lenguaje ofrece funciones que modifican fuera de su scope, vease sort() por ejemplo.


Dicho esto,

Código (php) [Seleccionar]
$variable = 7;

function myFunction(&$variable)
{
   $variable = 3;
}

myFunction($variable);

echo $variable; // 3




Notese el carácter & a la hora de definir los parámetros de la función. Es lo que hace que PHP pase la variable como referencia en vez de como valor.

https://www.php.net/manual/es/language.references.pass.php


Muy recomendable que te leas todos los puntos de esta página:

https://www.php.net/manual/es/language.references.php


PD: Los temas de PHP van al subforo de PHP.

Saludos

Leguim

#2
Gracias!

EDIT: Estoy teniendo un problema cuando quiero mandar como parametro NULL, ya que si no es nulo entonces si va a reemplazar el valor de la variable, pero si es nulo se toma como que no va a reemplazar nada.

El error dice que no se puede "Only variables can be passed by reference" tiene sentido que solamente variables se puedan pasar por referencia y no un valor nulo, ¿existe alguna manera?

EDIT 2:

Hay una solución que sería ponerle a ese parámetro:
Código (php) [Seleccionar]

function MyFunction(&$x = null) // por defecto si no se pone nada el valor será nulo
{
      // [...]
}

MyFunction(); // si no quiero editar nada, dejo esto así..


Esto me va bien, hasta que tengo dos variables entre ese parametro:
Código (php) [Seleccionar]

function MyFunction($a, &$x = null, $b) // por defecto si no pone nada el valor será nulo
{
     // [...]
}

MyFunction('A', , 'B'); // si no quiero editar nada, dejo esto así.. pero que meto en medio de eso porque así como está dará un error..

mchojrin

¿No puedes cambiar el orden de los parámetros para la función? Siempre se intenta dejar los opcionales al final de la lista.

Otra forma de resolverlo sería incluir explícitamente un null en la llamada:

MyFunction('A', null, 'B');
Ayudo a desarrolladores PHP a acceder a puestos mejor remunerados