Обратно несовместимые изменения
Хотя большая часть существующего кода 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;
более недопустимы. -
Кодировкой по умолчанию для функций htmlspecialchars(),
htmlentities() и html_entity_decode() сейчас является
UTF-8
, вместо прежнейISO-8859-1
. Обратите внимание, что изменения кодировки вывода с помощью конфигурационной опции default_charset не действует на вышеупомянутые функции до тех пор, пока вы не передадите "" (пустую строку) в качестве параметра кодировки в вызовы функций htmlspecialchars()/htmlentities()/html_entity_decode(). В целом, мы не рекомендуем так делать, потому что вы должны иметь возможность изменить кодировку вывода без воздействия на кодировку во время исполнения, используемую этими функциями. Самый безопасный подход - явно установить кодировку при каждом вызове функций htmlspecialchars(), htmlentities() и html_entity_decode(). -
В расширении даты и времени временная зона не может
быть больше установлена с помощью переменной окружения 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() изменен с
bool
erase
на intflags
. Обратите внимание, что код, в которомerase
явно задан какfalse
, в PHP 5.4 изменит свое поведение. Посмотрите этот пример, чтобы понять, как писать код, совместимый с PHP 5.3 и 5.4. -
stream_select() теперь сохраняет ключи массивов (array)
read
,write
иexcept
.
Следующие ключевые слова теперь зарезервированы и не могут использоваться в качестве названия функций, классов и т.д.:
Следующие функции были удалены из PHP:
- define_syslog_variables()
- import_request_variables()
- session_is_registered(), session_register() и session_unregister().
- Псевдонимы mysqli_bind_param(), mysqli_bind_result(), mysqli_client_encoding(), mysqli_fetch(), mysqli_param_count(), mysqli_get_metadata(), mysqli_send_long_data(), mysqli::client_encoding() и mysqli_stmt::stmt().