Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov
Изменения, нарушающие обратную совместимость
Хотя большая часть существущего кода на PHP 5 должна работать без изменений, нужно обратить внимание на следующие нарушения обратной совместимости:
- getrusage() возвращает NULL, если переданы несовместимые аргументы, начиная с PHP 5.2.1.
- ZipArchive::setCommentName() возвращает TRUE при удачном выполнении, начиная с PHP 5.2.1.
- ZipArchive::setCommentIndex() возвращает TRUE при удачном выполнении, начиная с PHP 5.2.1.
- SplFileObject::getFilename() возвращает имя файла, а не относительный/путь/к/файлу, начиная с PHP 5.2.1.
- Изменен приоритет переменной окружения PHPRC в Win32. Переменная окружения PHPRC имеет теперь больший приоритет, чем путь, сохраненный в реестре Windows.
- CLI SAPI больше не проверяет текущую директорию на наличие php.ini или php-cli.ini. В PHP 5.1.x существовала недокументированная особенность: исполняемый файл CLI проверял текущую директорию на наличие конфигурационного файла PHP. Это потенциально могло привести к непредсказуемому поведению в случае, если был найден нежелательный конфигурационный файл. Эта функциональность была удалена в версии 5.2.0 и PHP более не ищет в текущей директории файлы php.ini или php-cli.ini. Смотрите также раздел "Командная строка" данного руководства.
- Добавлено предупреждение при поиске остатка от деления на 0. В предыдущих версиях PHP выполнение операции "integer % 0" не вызывало никаких предупреждений. Результатом операции было значение FALSE. Начиная с PHP 5.2.0 эта операция вызовет E_WARNING, как и в любом другом случае деления на 0.
print 10 % 0; /* Warning: Division by zero in filename on line n */
- __toString() вызывается в случаях преобразования в строку. "Магический" метод __toString() вызывается в строковом контексте, то есть во всех случаях, когда объект используется как строка. В версии PHP 5.2.0 была удалена функциональность по умолчанию, возвращавшая строку с идентификатором объекта. Эта функциональность вызывала проблемы, поскольку идентификатор в общем случае не уникален. Это изменение означает, что ваше приложение будет вести себя неправильно, если оно полагается на идентификатор объекта в виде возвращаемого значения. Попытка использовать это значение как строку вызовет перехватываемую фатальную ошибку.
class foo {} $foo = new foo; print $foo; /* Catchable fatal error: Object of class foo could not be converted to string in filename on line n */
Даже с методом __toString() объекты не могут использоваться для индексации массива. Возможно, позднее будет реализовано встроенное хэширование для таких случаев, но в PHP 5.2.x вам придется реализовать собственное вычисление хэш-значений или использовать новую функцию SPL: spl_object_hash(). Из метода __toString() нельзя бросать исключения.class foo { public function __toString() { throw new Exception; } } try { print new foo; /* Fatal error: Method foo::__toString() must not throw an exception in filename on line n */ } catch(Exception $e) {}
- Не поддерживаются абстрактные статические методы классов. По недосмотру, PHP 5.0.x и 5.1.x позволяли определять абстрактные статические методы классов. Начиная с PHP 5.2.x такие методы могут быть только у интерфейсов.
abstract class foo { abstract static function bar(); /* Strict Standards: Static function foo::bar() should not be abstract in filename on line n */ }
- Расширение Oracle требует как минимум Oracle 10 под Windows.
- Добавлена поддержка RFC2397 (data: stream). Добавление URL-схемы "data" может потенциально привести к нарушению работы кода под Windows. Если вы работаете с файловой системой NTFS, используете мета-потоки и ваше приложение работает с файлом "data:" не указывая путь к нему, это вызовет ошибку. Чтобы исправить её, используйте протокол "file:" для доступа к файлу. Смотрите также » RFC 2397
/* При allow_url_include равной OFF (по умолчанию) */ include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+"; /* Warning: include(): URL file-access is disabled in the server configuration in filename on line n */
- Регрессия в шаблонах glob() В версии 5.2.4 исправление безопасности привело к регрессии для шаблонов вида "/foo/*/bar/*". Начиная с версии 5.2.5 функция glob() больше не будет выдавать предупреждение, а возвратит FALSE, если нарушены ограничения openbase_dir.
Описание на ru2.php.net
Описание на php.ru