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.
<?php print 10 % 0; /* Warning: Division by zero in filename on line n */ ?>
__toString() вызывается в
случаях преобразования в строку.
"Магический" метод __toString()
вызывается в строковом контексте, то есть во всех случаях, когда
объект используется как строка.
В версии PHP 5.2.0 была удалена функциональность по умолчанию,
возвращавшая строку с идентификатором объекта. Эта функциональность
вызывала проблемы, поскольку идентификатор в общем случае не уникален.
Это изменение означает, что ваше приложение будет вести себя неправильно,
если оно полагается на идентификатор объекта в виде возвращаемого значения.
Попытка использовать это значение как строку вызовет перехватываемую
фатальную ошибку.
<?php 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() нельзя
бросать исключения.
<?php 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 такие методы могут быть
только у интерфейсов.
<?php abstract class foo { abstract static function bar(); /* Strict Standards: Static function foo::bar() should not be abstract in filename on line n */ } ?>
Добавлена поддержка RFC2397 (data: stream).
Добавление URL-схемы "data" может потенциально привести к нарушению работы кода
под Windows. Если вы работаете с файловой системой NTFS,
используете мета-потоки и ваше приложение работает с файлом "data:"
не указывая путь к нему, это вызовет ошибку. Чтобы исправить её, используйте
протокол "file:" для доступа к файлу.
См. также » RFC 2397
<?php /* При 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.