Обратно несовместимые изменения

Хотя большая часть существующего кода 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.

Следующие ключевые слова теперь являются зарезервированными и не могут использоваться в качестве названия функции, класса и прочих имен.

Коментарии

Автор:
call_user_func_array() no longer accepts null as a second parameter and calls the function. It now emits a warning and does not call the function.
2009-09-15 22:03:46
http://php5.kiev.ua/manual/ru/migration53.incompatible.html
strlen changed in 5.3.0. It no longer returns 5 when called on Arrays.

If you abused this in your codebase, beware.
2016-06-08 22:23:46
http://php5.kiev.ua/manual/ru/migration53.incompatible.html
Автор:
In PHP 5.3, when accessing a string as an array, if the key was a string (non-existing because, for strings, the keys are integers), first char was returned. Probably it converts the string to integer, therefore to 0.
PHP 5.4 throws a warning.

$article;       // this holds '98765' but you expect an array

// You try to read a value from your "array"
// PHP 5.3 : nothing
// PHP 5.4 : Warning: Illegal string offset at line ...
$value = $article['id_article'];

var_dump($value);              // returns:   string(1) "9"

.
2018-10-06 00:24:22
http://php5.kiev.ua/manual/ru/migration53.incompatible.html

    Поддержать сайт на родительском проекте КГБ