Изменения, ломающие обратную совместимость

Несмотря на то, что практически весь существующий код не заметит перехода, все же следует обратить внимание на некоторые изменения, ломающие обратную совместимость:

Прекращена поддержка Windows XP и 2003

Прекращена поддержка Windows XP и 2003. Сборки под Windows теперь требуют минимум Windows Vista.

Регистронезависимость теперь не является зависимой от локали

Все регистронезависимые сравнения для функций, классов и имен констант теперь реализованы независимым от локали образом в соответствии с правилами ASCII. Это улучшает поддержку языков, использующих латинский алфавит с необычными правилами сравнения, например, турецкий и азербайджанский.

Это изменение может вызвать проблемы в коде, использующим регистронезависимое сравнение для не ASCII символов в многобайтовых кодировках (включая UTF-8), такие как акцентированные символы во многих европейских языках. Если у вас в кодовой базе используются не английские, не ASCII-символы, обратите особое внимание на это изменение перед миграцией промышленных сред на PHP 5.5.

Изменения pack() и unpack()

Функции pack() и unpack() были изменены так, чтобы они стали более совместимы с Perl:

  • pack() теперь поддерживает код форматирования "Z", который ведет себя аналогично "a".
  • unpack() теперь поддерживает код форматирования "Z" для строк, дополненных NULL и ведет себя так, как ранее вела при использовании "a": обрезает NULL-байты в конце строки.
  • unpack() теперь сохраняет NULL-байты в конце строки при использовании кода формата "a".
  • unpack() теперь обрезает все пробельные символы ASCII при использовании кода формата "A".

Написание обратно совместимого кода, использующего код формата "a" в функции unpack(), потребует использования функции version_compare(), иначе обратная совместимость поломается.

Пример:

<?php
// Старый код:
$data unpack('a5'$packed);

// Новый код:
if (version_compare(PHP_VERSION'5.5.0-dev''>=')) {
  
$data unpack('Z5'$packed);
} else {
  
$data unpack('a5'$packed);
}
?>

json_encode() changes

Когда параметр value, переданный в json_encode(), вызывает ошибку кодирования JSON, возвращается false вместо частичного вывода, если options не содержит JSON_PARTIAL_OUTPUT_ON_ERROR. Смотрите json_last_error() для полного списка причин, которые могут привести к сбою кодировки JSON. Одна из возможных причин сбоя заключается в том, что value содержит строки, содержащие некорректный UTF-8.

self, parent и static теперь всегда регистронезависимы

До PHP 5.5 были случаи, когда ключевые слова self, parent и static обрабатывались с учетом регистра. Эта проблема была исправлена, и теперь эти слова всегда обрабатываются регистронезависимо: SELF::CONSTANT теперь всегда идентично self::CONSTANT.

Удалены GUID логотипов PHP

GUID (внутренние идентификаторы изображения), использовавшиеся ранее для вывода различных логотипов PHP, теперь удалены. Также удалены функции, которые позволяли их получать. Удаленные функции:

  • php_logo_guid()
  • php_egg_logo_guid()
  • php_real_logo_guid()
  • zend_logo_guid()

Изменения внутреннего исполнения

Авторы расширений должны обратить внимание, что функция zend_execute() больше не может быть переопределена, и что некоторое количество изменений внесено в структуру execute_data и в работающие с ней функции и методы обработки байт-кода.

Большинство авторов расширений вряд ли будут затронуты, но те, кто пишет расширения, сильно затрагивающие движок Zend, должны ознакомиться с замечаниями по этому изменению.