Descubre por qué tu código actual que usa la función func_get_arg puede terminar con resultados diferentes al actualizar de PHP 5.x a 7.x

Cómo cambiaron las funciones PHP "func_get_arg" y "func_get_args" de PHP 5.xa PHP 7.x

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_argfunc_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 ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores