Cambios en 5.3.x en relación a la versión 5.2.x de PHP

La mayoría de mejoras en la versión 5.3.x de PHP no tienen impacto alguno en el código existente. Sin embargo, existen algunas incompatibilidades y nuevas características que deben considerarse.

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

Incompatibilidad con la versión 5.2.x

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 continúa usando las antiguas contraseñas de 16 bytes, mysql_connect() y otras funciones similares emitirán 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 mysql. 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. Ahora hay una definición de estos métodos 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.

Nueva funcionalidad

PHP 5.3.0 ofrece un amplio rango de nuevas funcionalidades:

Se ha añadido suporte para espacios de nombres.

Se ha añadido soporte para Enlaces Estáticos en Tiempo de ejecución.

Se ha añadido soporte para etiquetas de saltos (goto limitado).

Se ha añadido soporte nativo para Funciones Anónimas (funciones Lambda).

Hay dos nuevos métodos mágicos, __callStatic y __invoke.

Ahora hay soporte para sintaxis Nowdoc, similar a la sintaxis Heredoc, pero con comillas simples.

Ahora es posible utilizar Heredoc para inicializar tanto variables estáticas como propiedades/constantes de clases.

Ahora se puede declarar Heredocs usando comillas dobles, complementando la sintaxis de Nowdoc.

Ahora se pueden declarar Constants desde fuera de una clase utilizando la palabra clave const.

Ahora hay una forma reducida del operador ternario: ?:.

La envoltura para flujos HTTP ahora considera los códigos de estado del 200 al 399 como éxito.

Ahora es posible el acceso dinámico a métodos estáticos.

Ahora se pueden anidar Excepciones.

Se ha añadido un recolector de basuras para referencias circulares, y está activado por omisión.

La función mail() ahora soporta registros de correos enviados. (Nota: Esto sólo se aplica a correos enviados mediante esta función.)

Más información en el sitio de oficial de PHP