Обратно несовместимые изменения
Хотя большая часть существующего кода PHP 5 должна работать без изменений,
пожалуйста, примите к сведению следующие обратно несовместимые изменения:
-
Новый внутренний API разбора параметров был применен во всех
расширениях, идущих в комплекте с PHP 5.3.x. Этот API разбора параметров требует
от функций возвращать
NULL
при передаче несовместимых параметров. Есть
некоторые исключения из этого правила, например, функция get_class(),
которая будет продолжать возвращать FALSE
в случае ошибки.
-
clearstatcache() больше не очищает кэш функции realpath по
умолчанию.
-
Функция realpath() стала полностью независима от платформы.
Следствием этого является то, что некорректные относительные пути, такие как
__FILE__ . "/../x" более не работают.
-
Семейство функций call_user_func() стало использовать
$this даже если вызываемая функция - это родительский класс.
-
Функции работы с массивами natsort(),
natcasesort(), usort(),
uasort(), uksort(),
array_flip() и array_unique() больше
не принимают объекты в качестве аргументов. Для применения этих функций к
объекту необходимо сначала привести его к типу array.
-
Поведение функций при передаче параметров по значению, в которых параметры передаются по ссылке,
было изменено. Там, где прежде функция принимала параметр по значению, сейчас генерируется
фатальная ошибка. Любой прежний код, который передает константы или значения в качестве
параметров функциям, которые ожидают ссылки, необходимо будет изменить, чтобы
присвоить значение переменной перед вызовом функции.
-
Новая библиотека mysqlnd требует применения нового 41-го байтного формата пароля,
который был введен в MySQL 4.1. Если вы продолжаете использовать 16-ти байтные пароли,
это будет вынуждать функции mysql_connect() и подобные ей генерировать
ошибку "mysqlnd cannot connect to MySQL 4.1+ using old
authentication."
-
Новая библиотека mysqlnd не читает конфигурационные файлы mysql (my.cnf/my.ini),
как это делает старая библиотека libmysql. Если ваш код использует настройки в
конфигурационном файле, вы можете загрузить их явно с помощью функции
mysqli_options(). Обратите внимание, что это означает, что
константы PDO
PDO::MYSQL_ATTR_READ_DEFAULT_FILE
и
PDO::MYSQL_ATTR_READ_DEFAULT_GROUP
не определены, если
MySQL не компилировался с поддержкой mysqlnd.
-
Завершающий символ "/" был удален из класса SplFileInfo
и других связанных с ним классов каталогов.
-
Магический метод __toString()
не принимает более аргументы.
-
Магические методы
__get(),
__set(),
__isset(),
__unset(), и
__call() должны всегда
быть публичными и не могут быть статическими. Сигнатуры методов теперь стали более строгими.
-
Магический метод __call()
теперь вызывается при доступе к приватным и защищенным методам.
-
func_get_arg(), func_get_args() и
func_num_args() теперь не могут быть вызваны
извне зоны видимости файла, который включается директивой
include или require из
функции в вызывающем файле.
-
Добавлен слой эмуляции расширения MHASH, чтобы служить оберткой
вокруг расширения Hash. Однако не все алгоритмы покрыты,
в их числе и алгоритм s2k хэширования. Это означает,
что алгоритм s2k хэширования больше недоступен в пакете PHP 5.3.0.
Следующие ключевые слова теперь являются зарезервированными и не могут
использоваться в качестве названия функции, класса и прочих имен.