Изменения, ломающие обратную совместимость
Несмотря на то, что практически весь существующий код не заметит перехода, все же следует обратить внимание на некоторые изменения, ломающие обратную совместимость:
Прекращена поддержка 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, должны ознакомиться с замечаниями по этому изменению.