A partir de la versión 9.8 en adelante, Scriptcase y las aplicaciones generadas son compatibles con PHP 8.1.
A continuación se muestran algunas funciones que ya no funcionarán o que se han modificado en PHP 8.1.
1 - Operadores ternarios anidados sin paréntesis explícitos
Las expresiones condicionales de asignación, utilizadas de forma anidada, ya no están permitidas.
Antes de PHP 8:
$result = $aa != "" ? $xxx : isset($bb) && $bb != "" ? $zzz : "";
A partir de PHP 8:
if ($aa != "") {
$result = $xxx;
} elseif (isset($bb) && $bb != "") {
$result = $zzz;
} else {
$result = "";
}
2 - Acceder a valores de matriz y cadena usando llaves
El acceso a valores de cadenas y matrices mediante la sintaxis de llaves está en desuso. Utilice $var[$idx] en lugar de $var{$idx}.
En PHP 8.1, usar llaves{} para recuperar valores de la matriz provocará un error.
Antes de PHP 8:
$array = [1, 2];
echo $array[1]; // muestra 2
echo $array{1}; // también muestra 2
$string = "foo";
echo $string[0]; // muestra "f"
echo $string{0}; // también muestra "f"
A partir de PHP 8:
$array = [1, 2];
echo $array[1]; // muestra 2
echo $array{1}; // muestra el error: Deprecated: Array and string offset access syntax with curly braces is deprecated...
$string = "foo";
echo $string[0]; // muestra "f"
echo $string{0}; // muestra el error: Deprecated: Array and string offset access syntax with curly braces is deprecated...
3 - Parámetros obligatorios después de que se interrumpan los parámetros opcionales
A partir de PHP 8, ya no se permite declarar una función o método agregando un parámetro obligatorio después de los parámetros opcionales.
Esto significa que la siguiente declaración de función dará como resultado una
Aviso:
function foo($param_optional = null, $param_required) {
// ^^ optional parameter , ^^ required parameter
}
Ejemplo de ‘Aviso’ generado por PHP:
Deprecated: Required parameter $param_required follows optional parameter $param_optional in ... on line ...
4 - Operaciones aritméticas con cadenas no numéricas
Hasta PHP 7 era posible realizar operaciones matemáticas con variables que contenían cadenas no numéricas, que en esta situación equivalía a cero.
En PHP 8.1 este tipo de cálculo comenzaba a mostrar un error.
Antes de PHP 8, el siguiente código no generaría un error:
$b = "";
$a = $b + 2;
Desde PHP 8 en adelante, es necesario probar si el valor de $b es una cadena numérica o un número, antes de realizar la operación:
I.e 1:
$a = is_numeric($b) ? $b + 2 : 2;
I.e 2:
if (!is_numeric($b)) {
$b = 0;
}
$a = $b + 2;
5 - Variables e índices inexistentes
Hasta PHP 7 había cierta tolerancia respecto a las referencias a variables o índices indefinidos, generando únicamente un Aviso.
En PHP 8, cualquier referencia a una variable inexistente o índice de matriz generará una Advertencia.
Entonces, si su PHP está habilitado para mostrar Advertencias, encontrará errores para ese contexto.
Para solucionarlo, es necesario probar si existe una variable o índice de matriz, antes de usarlo en alguna operación.
I.e:
$a = isset($b) ? $b + 2 : 2;
6 - Función ‘each()’
Devuelve el par clave/valor actual de una matriz y avanza su cursor.
Esta función se eliminó en PHP 8,
si la está utilizando en sus aplicaciones, debe cambiar el código antes de publicar en un entorno con PHP 8 o superior.
Algunas opciones de sustitución:
I.e:
$result = "";
$tab = array(0=>array('tp'=>1,'vl'=>'aaa'),
1=>array('tp'=>2,'vl'=>'bbb'),
2=>array('tp'=>3,'vl'=>'ccc'));
Antes de PHP 8:
while (list ($key, $val) = each($tab)) {
$result .= $tab[$key]["vl"];
}
A partir de PHP 8, usando foreach():
foreach ($tab as $key => $val) {
$result .= $tab[$key]["vl"];
}
7 - Función array_key_exists()
Comprueba si existe una clave o un índice en una matriz.
Antes de PHP 8:
if (array_key_exists('index', $array1)) {
// codigo
}
A partir de PHP 8:
if (isset($array1['index'])) {
// codigo
}
Proporcione el formato de número como una cadena de moneda.
Esta función se eliminó de PHP 8 y en adelante, se puede reemplazar por la función intl
NumberFormatter.
Antes de PHP 8:
echo money_format("%.2n", 1234.56);
A partir de PHP 8:
$currencyObject = new NumberFormatter("pt-BR", NumberFormatter::CURRENCY);
echo $currencyObject->format(1234.56);
9 - Función mb_strrpos()
Busca la posición de la última aparición de un valor en una cadena.
Pasar la codificación como tercer parámetro a la función está en desuso..
En su lugar, pase un desplazamiento 0 y la codificación como el cuarto parámetro:
Antes de PHP 8:
$string = 'O rato roeu a roupa';
echo mb_strrpos($string, 'roeu', 'UTF-8');
A partir de PHP 8:
$string = 'O rato roeu a roupa';
echo mb_strrpos($string, 'roeu', 0, 'UTF-8');
Lista completa de cambios de PHP
Para tener la lista completa de cambios en PHP siga los enlaces según la versión de PHP.