Обратно несовместимые изменения
Хотя большая часть существующего кода PHP 5 должна работать без изменений,
обратите внимание на следующие обратно несовместимые изменения:
-
Безопасный режим больше
не поддерживается. Любое приложение, которое полагается на безопасный режим, возможно,
потребует внесения корректировок по части безопасности.
-
Волшебные кавычки теперь не работают.
Приложения, которые используют эту возможность, могут нуждаться в обновлении во
избежание проблем с безопасностью.
Функции get_magic_quotes_gpc() и get_magic_quotes_runtime()
теперь всегда возвращают
FALSE
. Функция set_magic_quotes_runtime() вызывает ошибку уровня
E_CORE_ERROR
при попытке разрешить
Магические кавычки.
-
Директивы php.ini register_globals и
register_long_arrays
были удалены.
-
Директива mbstring.script_encoding была удалена. Вместо нее используйте
zend.script_encoding.
-
Возможность передачи по ссылке во время вызова функции была убрана.
-
Операторы break
и continue
теперь не принимают аргументов в виде переменной. Например, выражение
break 1 + foo() * $bar; невозможно. Вы по-прежнему можете использовать
явный аргумент в виде статической константы. Например, break 2;.
Побочным эффектом этого изменения является то, что
конструкции break 0; и continue 0; более недопустимы.
-
В расширении даты и времени временная зона не может
быть больше установлена с помощью переменной окружения TZ. Вместо этого вам необходимо
указать временную зону, используя опцию php.ini date.timezone или функцию date_default_timezone_set().
PHP теперь не будет пытаться определять временную зону. Вместо этого будет установлена зона "UTC" и выдано предупреждение
E_WARNING
.
-
Нецифровые смещения строк, например $a['foo'], где $a - это строка, теперь
возвращают false в функции isset() и true в функции
empty() и вызывают предупреждение
E_WARNING
при подобном использовании. Смещения, заданные типами double, bool и null также приводят к
генерации предупреждения E_NOTICE
, а строки, содержащие числа ($a['2']), все еще работают, как и раньше. Обратите внимание, что смещения,
подобные '12.3' и '5 foobar' рассматриваются как
нечисловые и вызывают предупреждение E_WARNING
, но
преобразовываются к 12 и 5 соответственно, по причине необходимости сохранения обратной
совместимости.
Примечание: следующий код возвращает различные результаты.
$str='abc';var_dump(isset($str['x'])); // false для PHP 5.4 и выше, но true для 5.3 и ниже
-
Преобразование массива в строку теперь приводит к предупреждению
E_NOTICE
, но результат
преобразования будет по-прежнему строка "Array".
-
Преобразование
NULL
, FALSE
или пустой строки в объект путем добавления свойства
теперь будет генерировать ошибку уровня E_WARNING
вместо ошибки E_STRICT
.
-
Имена параметров, которые "затеняют" имена суперглобальных переменных теперь вызывают фатальную ошибку.
Это правило запрещает код, подобный этому: function foo($_GET, $_POST) {}.
-
Хеш-алгоритмы Salsa10 и Salsa20 были удалены.
-
Теперь хеш-алгоритм Tiger использует порядок байт
big-endian.
Изучите пример того, как писать код
совместимый как с PHP 5.3 так и с 5.4.
-
Функция array_combine() теперь возвращает array()
вместо
FALSE
, когда в качестве параметров заданы два пустых массива.
-
Если вы используете функцию htmlentities() с азиатскими наборами
символов, то она работает также, как функция htmlspecialchars().
Так всегда было в предыдущих версиях PHP, а теперь генерируется ошибка
уровня
E_STRICT
.
-
Третий параметр функции ob_start() изменен с
boolean
erase
на integer
flags
. Обратите внимание, что код, в котором
erase
явно задан как FALSE
, в PHP 5.4 изменит свое поведение.
Посмотрите этот пример, чтобы понять, как
писать код, совместимый с PHP 5.3 и 5.4.
Следующие ключевые слова теперь зарезервированы и не могут
использоваться в качестве названия функций, классов и т.д.:
Следующие функции были удалены из PHP: