Otros cambios

Avisos y advertencias sobre aritmética con cadenas no inválidas

Se han introducido nuevos errores E_WARNING y E_NOTICE al forzar cadenas no válidas usando operadores que esperan número (+ - * / ** % << >> | & ^) o sus equivalentes de asignación. Se emite un E_NOTICE cuando la cadena comienza con un valor numérico pero contiene al final caracteres no numéricos, y se emite un E_WARNING cuando la cadena no contiene ningún valor numérico.

<?php
'1b' 'algo';

El resultado del ejemplo sería:

Notice: A non well formed numeric value encountered in %s on line %d
Warning: A non-numeric value encountered in %s on line %d

Advertencia de desbordamiento de secuencia de escape octal

Anteriormente, las secuencias de escape de cadenas octales de tres octetos desbordaban silenciosamente. Ahora, siguen desbordando, pero se emite un E_WARNING.

<?php
var_dump
("\500");

El resultado del ejemplo sería:

Warning: Octal escape sequence overflow \500 is greater than \377 in %s on line %d
string(1) "@"

Reparación de inconsistencias en $this

Pese a que $this está considerada un variable especial en PHP, carece de comprobaciones apropiadas para asegurarse de que no se usó como un nombre de variable o fue reasignada. Ahora, esto se ha rectificado para asegurarse de que $this no puede ser una variable definida por el usuario, reasignada a un valor diferente, o globalizada.

Generación de ID de sesión sin 'hash'

Los ID de sesión ya no utilzarán 'hash' en su generación. Este cambio provoca la eliminación de los cuatro siguientes ajustes ini:

  • session.entropy_file
  • session.entropy_length
  • session.hash_function
  • session.hash_bits_per_character

Y la adición de los dos siguientes ajustes ini:

  • session.sid_length - define la longitud del ID de sesión, siendo 32 caracteres la predeterminada por retrocompatibilidad
  • session.sid_bits_per_character - define el número de bits a almacenar por carácter (esto es, aumenta el rango de caracteres que se pueden utilizar en el ID de sesión), siendo 4 el predeterminado por retrocompatibilidad

Cambios en el manejo del fichero INI

precision

Si el valor se establece a -1, se usará el modo dtoa 0. El valor predeterminado aún es 14.

serialize_precision

Si el valor se establece a -1, se usará el modo dtoa 0. Ahora se usa el valor -1 como predeterminado.

gd.jpeg_ignore_warning

El valor predeterminado de este ajuste de php.ini ha cambiado a 1, por lo que las advertencias predeterminadas de libjpeg son ignoradas.

opcache.enable_cli

El valor predeterminado para este ajuste php.ini ha cambiado a 1 (habilitado) en PHP 7.1.2.

Generación de ID de sesión con un CSPRNG solamente

Los ID de sesión ahora solamente serán generados con un CSPRNG.

Mensajes TypeError más informativos cuando se permtie NULL

Las exceptciones TypeError para comprobaciones de tipo arg_info ahora proporcionan mensajes de error más informativos. Si el tipo de parámetro o el tipo devuelto acepta NULL (ya sea teniente un valor predeterminado de NULL o siendo un tipo «nullable»), el mensaje de error ahora mencionará esto con un mensaje "must be ... or null" o "must ... or be null."

add a note add a note

User Contributed Notes 3 notes

up
12
ksours at internbrands dot com
1 year ago
It isn't documented anywhere that I can find, but there is another change to the string warnings in php7.1

$x = "";
$x['foo'] = 'bar';

Will quietly convert $x to an array in php70.  In php71 it will emit a warning and set the first character of $x to 'b' (roughly interpreting the line as $x[0] = 'b';)
up
2
tuxedobob
1 month ago
I'm sure this is something that some people think is the greatest thing ever, but to me, the warnings thrown by "bad" string to number conversion are a complete pain in the ass.

Plenty of code relies on the idea that 7 + '' = 7, no warning thrown, because that's expected.

I don't want to disable all warnings, just this one, but I can't, so now there's going to be

$total += (is_numeric($val) ? $val : 0);

all over the place.
up
1
mikey1974 at gmail DOT com
1 month ago
The idea behind throwing warnings in arithmethics is good (3 + "dogs" is useless), but in RFC was forgotten special case which causes a lot of pain ever since PHP 7.1 - arithmethics with 1. empty strings and 2. NULLs. These should NOT emit warnings and should be silently converted in non-strict mode. This is how PHP worked ever for years. Emiting warnings on empty strings and NULLs would be however OK in strictly typed mode. It's particularly this commit, which should be fixed: https://github.com/php/php-src/commit/1e82ad8038d3100b7e27be870652c1f639a7200a .
To Top