PHP workshop for 2 days with Shopware, Sylius, PHPUnit and Codeception in Duisburg

Устаревшая функциональность

Ядро PHP

Реализация Serializable без __serialize() и __unserialize()

Должны быть реализованы либо только новые методы, если не предусмотрена поддержка PHP до версии 7.4, либо должны быть реализованы оба способа.

Передача null параметрам встроенных функций, не допускающим значение NULL

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

<?php
var_dump
(str_contains("foobar"null));
// Deprecated: Passing null to parameter #2 ($needle) of type string
//             is deprecated
?>

Неявная несовместимость преобразования float к int

Неявное преобразование числа с плавающей точкой (float) к целому числу (int), что приводит к потере точности, теперь не рекомендуется. Это влияет на ключи массива (array), объявления целочисленных (int) типов в принудительном режиме и операторов, работающие с целыми числами (int).

<?php
$a 
= [];
$a[15.5]; // устарело, поскольку значение ключа теряет компонент 0.5
$a[15.0]; // работает, так как 15.0 == 15
?>

Вызов элемента static в трейтах

Вызов static-метода или доступ к static-свойству непосредственно в трейте устарел. К статическим методам и свойствам следует обращаться только в классе, использующем трейт.

Возвращаемое значение __sleep() не массив (array)

Возвращаемое значение __sleep(), не являющееся массивом теперь выводит диагностику.

Возвращаемое значение по ссылке из функции void

<?php
function &test(): void {}
?>
Такая функция противоречива и уже при вызове выдаёт следующий E_NOTICE: Only variable references should be returned by reference (По ссылке должны возвращаться только ссылки на переменные).

Автовивификация из false

Автовивификация - это процесс создания нового массива (array) при добавлении нового значения. Автовивификация запрещена для скалярных значений, false однако был исключением. Теперь такое поведение устарело.

<?php
$arr 
false;
$arr[] = 2;   // устарело
?>

Замечание:

Автовивификация из null и неопределённого значения по-прежнему разрешены:

<?php
// Из неопределённого значения
$arr[] = 'какое-то значение';
$arr['doesNotExist'][] = 2;
// Из null
$arr null;
$arr[] = 2;
?>

ctype

Проверка нестроковых аргументов

Передача нестрокового аргумента устарела. В будущем аргумент будет интерпретироваться как строка вместо кода ASCII. В зависимости от предполагаемого поведения аргумент должен быть приведён к строке (string) или должен быть сделан явный вызов chr(). Затронуты все функции ctype_*().

Date

Функции date_sunrise() и date_sunset() устарели в пользу date_sun_info().

Функция strptime() устарела. Вместо неё используйте date_parse_from_format() (для синтаксического анализа, не зависящего от языкового стандарта) или IntlDateFormatter::parse() (для синтаксического анализа, зависящего от языкового стандарта).

Фильтр

Фильтры FILTER_SANITIZE_STRING и FILTER_SANITIZE_STRIPPED устарели.

INI-директива filter.default устарела.

GD

Параметр num_points функции imageopenpolygon() и imagefilledpolygon() устарел.

Хеширование

Функция mhash(), mhash_keygen_s2k(), mhash_count(), mhash_get_block_size() и mhash_get_hash_name() устарели. Вместо них используйте функции hash_*().

IMAP

Константа NIL устарела. Вместо неё используйте 0.

Intl

Вызов IntlCalendar::roll() с логическим значением (bool) устарел. Используйте 1 and -1 вместо true и false, соответственно.

Многобайтовые строки

Вызов mb_check_encoding() без каких-либо аргументов устарел.

MySQLi

Свойство mysqli_driver::$driver_version устарело. Оно было бессмысленным и устаревшим, используйте вместо него PHP_VERSION_ID.

Вызов метода mysqli::get_client_info() или mysqli_get_client_info() с аргументом mysqli устарел. Используйте mysqli_get_client_info() без каких-либо аргументов, чтобы получить информацию о версии клиентской библиотеки.

Метод mysqli::init() устарел. Замените вызовы parent::init() на parent::__construct().

OCI8

INI-директива oci8.old_oci_close_semantics устарела.

ODBC

Функция odbc_result_all() устарела.

PDO

Режим выборки PDO::FETCH_SERIALIZE устарел.

PgSQL

Отсутствие передачи аргумента подключения всем функциям pgsql_*() устарело.

SOAP

Параметр ssl_method в SoapClient::__construct() устарел в пользу параметров контекста потока SSL.

Стандартные функции

Вызов key(), current(), next(), prev(), reset() или end() для объектов (object) устарел. Либо сначала используйте get_mangled_object_vars() для объекта, либо используйте ArrayIterator.

INI-директива auto_detect_line_endings устарела. При необходимости обработайте разрывы строк "\r" вручную.

Константы FILE_BINARY и FILE_TEXT устарели. Они никогда не имели смысла.

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top