Cambios con versiones incompatibles
Aunque la mayoría del código existente en PHP 5 debería funcionar sin muchos cambios, por favor
tome nota de algunas incompatibilidades con versiones anteriores:
-
El modo seguro ya no
es soportado. Cualquier aplicación que dependa del modo seguro puede necesitar
ajustes, en términos de seguridad.
-
Las comillas mágicas han sido eliminadas. Las aplicaciones que dependan
de esta característica pueden necesitar ser actualizadas, para evitar cuestiones de seguridad.
get_magic_quotes_gpc() y get_magic_quotes_runtime()
ahora siempre devuelven
FALSE
. set_magic_quotes_runtime() emite un
error de nivel E_CORE_ERROR
al intentar habilitar las Comillas mágicas.
-
Las directivas de php.ini register_globals y
register_long_arrays
han sido eliminadas.
-
Las directivas mbstring.script_encoding han sido eliminadas. Use zend.script_encoding en su lugar.
-
El paso por referencia en tiempo de llamada ha sido eliminado.
-
Las sentencias break
y continue
ya no aceptan argumentos variables (p.ej., break 1 + foo() * $bar;).
Los argumentos estáticos aún funcionan, como break 2;. Como efecto secundario de este cambio
break 0; y continue 0; ya no están permitidos.
-
En la extensión de fecha y hora, la zona horaria ya no puede ser
establecida usando la variable de entorno TZ. En su lugar se tiene que especificar una zona horaria usando la
opción de php.ini date.timezone o la función
date_default_timezone_set(). PHP ya no intentará adivinar la zona horaria, y en su lugar recurrirá a "UTC"
y emitirá un error de nivel
E_WARNING
.
-
Los índices de cadenas no numericos - p.ej. $a['foo'] donde $a es una cadena - ahora devuelven
false sobre isset() y true sobre empty(), y producen un error de nivel
E_WARNING
si se intenta usarlos. Los índices de los tipo double, bool y null producen un error de nivel E_NOTICE
. Las cadenas numéricas
(p.ej. $a['2']) aún funcionan como antes. Observe que los índices como '12.3'
y '5 foobar' son considerados no numéricos y producen un error de nivel E_WARNING
,
aunque son convertidos a 12 y 5 respectivamente, por razones de retrocompatibilidad.
Nota: El siguiente código devuelve resultados diferentes.
$str='abc';var_dump(isset($str['x'])); // false para PHP 5.4 o posterior, pero true para 5.3 o anterior
-
Ahora, convertir un array a cadena genera un error de nivel
E_NOTICE
,
aunque el resultado de la conversión aún será la cadena "Array".
-
Convertir
NULL
, FALSE
, o una cadena vacía en un objeto añadiendo una propiedad
ahora emitirá un error de nivel E_WARNING
, en lugar de nivel E_STRICT
.
-
Los nombres de parámetros que cubren super globales ahora causan un error fatal. Esto prohíbe código como
function foo($_GET, $_POST) {}.
-
Los algoritmos hash Salsa10 y Salsa20 han sido eliminados.
-
array_combine() ahora devuelve array() en lugar de
FALSE
cuando se proporcionan dos arrays vacíos como parámetros.
-
Si se utiliza htmlentities() con conjuntos de caracteres asiáticos,
funcion como htmlspecialchars() - este siempre ha sido el
caso en versiones de PHP anteriores, pero ahora se emite un error de nivel
E_STRICT
.
-
El tercer parámetro de ob_start() se cambió de
boolean
erase
a integer
flags
. Observe que el código que establezca explícitamente
erase
a FALSE
ya no se comportará como se esperaba
en PHP 5.4: siga
este ejemplo para escribir
código que sea compatible con PHP 5.3 y 5.4.
Las siguientes palabras clave ahora son reservadas, por lo que no se pueden usar
como nombres de funciones, clases, etc.
Las siguientes funciones han sido eliminadas de PHP: