Обратно несовместимые изменения
Хотя большая часть существующего кода 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() больше не принимают объекты в качестве аргументов. Для применения этих функций к объекту, необходимо сначала привести его к массиву.
- Поведение функций при передаче параметров по значению, в которых параметры передаются по ссылке, было изменено. Там, где прежде функция принимала параметр по значению, сейчас генерируется фатальная ошибка. Любой прежний код, который передает константы или значения в качестве параметров функциям, которые ожидают ссылки, необходимо будет изменить, чтобы присвоить значение переменной перед вызовом функции.
-
Новая библиотека mysqlnd требует применения нового 41-го байтного формата пароля,
который был введен в MySQL 4.1. Если вы продолжаете использовать 16-ти байтные пароли,
это будет вынуждать функции mysql_connect() и подобные ей генерировать
ошибку
"mysqlnd cannot connect to MySQL 4.1+ using old authentication."
-
Новая библиотека mysqlnd не читает конфигурационные файлы mysql (my.cnf/my.ini),
как это делает старая библиотека libmysqlclient. Если ваш код использует настройки в
конфигурационном файле, вы можете загрузить их явно с помощью функции
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.
Следующие ключевые слова теперь зарезервированы и не могут использоваться в качестве названия функции, класса и т.д.