La actualización de la versión de PHP para su proyecto no suele ser complicada a menos que tenga una gran cantidad de código obsoleto en su proyecto que se eliminó en la versión más reciente. Una de las cosas que muchos desarrolladores no esperan en el cambio de versión con compilaciones menores, por ejemplo, de 5.20 a 5.29, es el cambio del comportamiento de una función incorporada, sin embargo, con una compilación mayor, es decir, el nuevo PHP 7, puede esperar que algunas cosas se rompan. En este caso, la función func_get_arg
cambió ligeramente. Para comprender cómo cambió el comportamiento de la función, analice el siguiente fragmento de PHP:
<?php
function printValue($value) {
// Update el valor de la variable
$value = "The value is: " . $value;
// Imprime el valor del primer argumento
echo func_get_arg(0);
}
// Run function
printValue(123);
La función printValue
imprimirá el primer argumento enviado a la función gracias a la función func_get_arg
. Si ejecutas el código en diferentes versiones de PHP, la salida será diferente. En PHP <=5.x
, la salida será:
123
Sin embargo, en PHP >=7.x
, la salida será:
The value is: 123
¿Pero por qué?
A partir de ahora en PHP 7.x
, las funciones func_get_arg
y func_get_args
no devolverán el valor original que se proporcionó como parámetro, sino que proporcionarán el valor actual del argumento (que obviamente puede haber sido modificado intencionalmente por su propio código). Si el tiempo de ejecución de su función no modifica el valor del argumento, entonces no tiene que preocuparse por este pequeño problema. Alternativamente, puede corregir este comportamiento simplemente creando una nueva variable en el alcance que almacena el mismo valor del argumento pero con la modificación o hacer la modificación después de recuperar su valor original en otra variable:
<?php
function printValue($value) {
// Almacena el valor modificado (2)
$modifiedValue = $value + 1;
echo func_get_arg(0);
}
// En cualquier PHP imprime 1
printValue(1);
Que te diviertas ❤️!
Conviertete en un programador más sociable