Incompatibilidades con versiones anteriores

Si bien casi todo el código existente en PHP5 debe funcionar sin realizar cambios, por favor, tenga en cuenta las siguientes incompatibiidades con respecto a versiones anteriores:

  • La nueva API encargada de interpretar parámetros internos ha sido aplicada en todas las extensiones que incluye PHP 5.3.x. Esta API de interpretación de parámetros provoca que las funciones devuelvan NULL cuando se le proporcionen parámetros incompatibles. Existen algunas excepciones a esta regla, como la función get_class(), que seguirá devolviendo FALSE en caso de error.
  • clearstatcache() ya no limpia por omisión la caché de la ruta real.
  • realpath() ahora es completamente independiente de la plataforma. Como consecuencia, las rutas relativas inválidas como por ejemplo __FILE__ . "/../x" ya no funcionan.
  • La familia de funciones call_user_func() ahora propagan $this incluso en llamadas desde clases padre.
  • Las funciones de array natsort(), natcasesort(), usort(), uasort(), uksort(), array_flip(), y array_unique() ya no aceptan objetos como parámetros. Para poder realizarlo, primero debe convertir el objeto en un array.
  • Ha cambiado el comportamiento de funciones con parámetros por referencia llamados por valor. Donde antes se aceptaban parámetros por valor, ahora se emite un error fatal. Todo código anterior que proporcionara constantes o valores literales a funciones que esperan variables por referencia, necesitarán modificarse para asignar el valor a una variable antes de llamar a la función.
  • La nueva biblioteca mysqlnd necesita el uso del nuevo formato de contraseñas de 41 bytes de MySQL 4.1. Si se continua usando las antiguas contraseñas de 16 bytes, mysql_connect() y otras funciones similares emitiran el error, "mysqlnd cannot connect to MySQL 4.1+ using old authentication."
  • La nueva biblioteca mysqlnd no lee el fichero de configuración de mysql (my.cnf/my.ini), tal y como hacía la anterior biblioteca de libmysqlclient. Si su código depende de los ajustes de dicho fichero de configuración, puede cargarlo explícitamente con la función mysqli_options(). Tenga en cuenta que esto significa que las constantes específicas de PDO PDO::MYSQL_ATTR_READ_DEFAULT_FILE y PDO::MYSQL_ATTR_READ_DEFAULT_GROUP no estarán definidas si el soporte de MySQL en PDO está compilado con mysqlnd.
  • La / final se ha eliminado de la clase SplFileInfo y de otras clases de directorios relacionadas.
  • El método mágico __toString ya no acepta parámetros.
  • Los métodos mágicos __get, __set, __isset, __unset,y __call deben ser siempre públicos, y ya no pueden ser estáticos. La definición de estos métodos es obligatoria.
  • Ahora se invoca al método mágico __call cuando se accede a métodos privados y protegidos.
  • func_get_arg(), func_get_args() y func_num_args() ya no pueden ser llamados desde el ámbito de un fichero que se ha incluido llamando a include o require desde una función desde el fichero llamado.
  • Se ha añadido una capa que emula la extensión MHASH para envolver la extensión Hash. En cualquier caso, no cubre todos los algoritmos, a destacar el algoritmo de hash s2k. Esto significa que desde PHP 5.3.0 ya no está disponible el hash con s2k.

Las siguientes palabras clave son ahora reservadas y no se pueden utilizar ni en nombres de funciones, ni de clases, etc.

add a note add a note

User Contributed Notes 3 notes

up
0
chokolatrix
6 years ago
In PHP 5.3, when accessing a string as an array, if the key was a string (non-existing because, for strings, the keys are integers), first char was returned. Probably it converts the string to integer, therefore to 0.
PHP 5.4 throws a warning.

$article;       // this holds '98765' but you expect an array

// You try to read a value from your "array"
// PHP 5.3 : nothing
// PHP 5.4 : Warning: Illegal string offset at line ...
$value = $article['id_article'];

var_dump($value);              // returns:   string(1) "9"

.
up
0
peterix at gmail dot com
8 years ago
strlen changed in 5.3.0. It no longer returns 5 when called on Arrays.

If you abused this in your codebase, beware.
up
0
Chris Bolt
15 years ago
call_user_func_array() no longer accepts null as a second parameter and calls the function. It now emits a warning and does not call the function.
To Top