Cambios incompatibles con versiones anteriores

Aunque la mayoría del código de PHP 5 existente debería funtionar sin cambios, se ha de tomar nota de algunos cambios incompatibles con versiones anteriores:

Eliminado el soporte para Windows XP y 2003

El soporte para Windows XP y 2003 ha sido eliminado. Las construcciones de PHP para Windows ahora requieren Windows Vista o superior.

La no consideración de mayúsculas/minúsculas ya no es específica de la configuración regional

Todas las comparaciones que no estiman las mayúsculas/minúsculas de funciones, clases y nombres de constantes, ahora se realizan de una manera independiente de la configuración regional según las reglas de ASCII. Esto mejora el soporte para idiomas que usan el alfabeto latino con reglas de cotejamiento no usuales, tales como el turco o el azerí.

Esto podría causar problemas para el código que usa comparaciones que no consideran las mayúsculas/minúsculas para caracteres distintos a los de ASCII en conjuntos de caracteres multibyte (incluyendo UTF-8), como carecteres acentuados en muchos idiomas europeos. Si se tiene un código base distinto del inglés y que no sea ASCII, será necesario probar que no se depende inadvertidamente de este comportamiento antes de utilizar PHP 5.5 para sistemas de producción.

Cambios de pack() y unpack()

Se introdujeron cambios en pack() y unpack() para hacerlos más compatibles con Perl:

  • pack() ahora admite el código de formato "Z", el cual tiene un comportamiento idéntico al de "a".
  • unpack() ahora admite el códio de formato "Z" para cadenas con relleno NULL, y se comporta como lo hacía "a" en versiones anteriores: eliminará los bytes NULL sobrantes.
  • unpack() ahora mantiene los bytes NULL sobrantes cuando se usa el código de formato "a".
  • unpack() ahora elimina los espacios en blanco ASCII sobrantes cuando se usa el código de formato "A".

Escribir código retrocompatible que use el código de formato "a" con unpack() requiere el uso de version_compare(), debido a la rotura de retrocompatibilidad.

Por ejemplo:

<?php
// Código anterior:
$data unpack('a5'$packed);

// Código nuevo:
if (version_compare(PHP_VERSION'5.5.0-dev''>=')) {
  
$data unpack('Z5'$packed);
} else {
  
$data unpack('a5'$packed);
}
?>

self, parent y static ahora nunca consideran las mayúsculas/minúsculas

Antes de PHP 5.5, existían casos donde las palabras clave self, parent, y static eran tratadas de forma que consideraban las mayúsculas/minúsculas. Ahora se ha solucionado, y esta palabras clave siempre son manejadas para no considerarlas: SELF::CONSTANT ahora es tratada de forma idéntica a self::CONSTANT.

Eliminados los GUIDs de logos de PHP

Los GUIDs que anteriormente resultaban en la generación de PHP de varios logos han sido eliminados. Esto incluye la eliminación de las funciones que devuelven esots GUIDs. Las funciones eliminadas son:

Cambios en la ejecución interna

Los autores de extensiones debería observar que la función zend_execute() ya no puede ser sobrescrita, y que se han hecho numerosos cambios a la estructura execute_data y funciones y métodos relacionados que manejan códigos de operación.

A la mayoría de los autores de extensiones esto no les afecta, pero aquellos que escriban extensiones que dependan fuertemente del Motor Zend deberían leer las notas sobre estos cambios.