PHP Velho Oeste 2024

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.
  • El algoritmo de «hash» Tiger ahora utiliza el orden de byte «big-endian». Por favor, siga este ejemplo para escribir código compatible con PHP 5.3 y 5.4.
  • 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:

add a note add a note

User Contributed Notes 3 notes

up
40
ky dot patterson at adlinkr dot com
9 years ago
If you have content that is not 100% UTF-8 then TAKE NOTE:

Starting in PHP 5.4 htmlspecialchars() and htmlentities() assume charset=UTF-8 by default AND WILL RETURN BLANK IF YOUR INPUT IS NOT VALID UTF-8.

So if you have a lot of function calls that look like this:
<?php
echo htmlspecialchars($input);
// or
echo htmlentities($input);
?>
i.e. no charset and no flags -- and $input is ISO-8859 (or anything else apart from 7-bit ASCII or UTF-8) -- then PHP 5.4 and 5.5 will return an empty string, and you will be surprised and probably unhappy.

This is apparently a feature, not a bug.
up
30
Chris
11 years ago
Missing some chars like german umlauts after use of htmlspecialchars? That's because the third param encoding has changed it's default value in PHP 5.4 from ISO-8859-1 to UTF-8.

Possible solution #1:
Change your code from this ...
<?php htmlspecialchars( 'äöü' ); ?>
... to this:
<?php htmlspecialchars ( 'äöü' , ENT_COMPAT | ENT_HTML401 , 'ISO-8859-1' ); ?>

Possible solution #2:
Create a wrapper function and replace htmlspecialchars( to i.e. isohtmlspecialchars( with your IDE/editor/shell...

Example of a wrapper function:
<?php
function isohtmlspecialchars( $str ){
   return
htmlspecialchars ( $str , ENT_COMPAT | ENT_HTML401 , 'ISO-8859-1' );
}
?>
up
20
anton at zebooka dot com
10 years ago
It seems that starting of PHP 5.4 you can not override class method with different signature.

Example:
<?php
class A
{
    public function
doSomething($a, $b)
    {
    }
}

class
B extends A
{
    public function
doSomething($c)
    {
    }
}
?>

PHP Strict standards:  Declaration of B::doSomething() should be compatible with A::doSomething(B $a) in Command line code on line 1
To Top