PHP 7.2: Головні нововведення

PHP 7.2 додає тип object, дозволяє прибирати підказки типів параметрів у перевизначеннях (без порушення LSP), розширює debugDumpParams() для емульованих PDO-запитів, підтягує LDAP EXOP і сімейство socket_addrinfo_*, а в поставку включає Sodium (libsodium) як сучасну базу для криптографії.

Mcrypt викидають із ядра (залишається в PECL); count() на «не тому, що треба» і get_class(null) починають голосно скаржитися. Міграція: прибрати mcrypt, пройтися по count(, виправити get_class, переглянути приведення масив/об’єкт із числовими ключами.

Зміст


Тип object

function acceptsAnyObject(object $x): void {}

Розширення типів параметрів

У дочірньому методі можна не повторювати type hint з інтерфейсу; звуження або несумісна зміна заборонені.

PDO debugDumpParams()

Показує повний SQL для емульованих prepares — зручно ловити помилки в динамічних запитах.

LDAP EXOP

ldap_exop*, ldap_parse_exop, константи на кшталт LDAP_EXOP_START_TLS.

socket_addrinfo_*

Резолв і з’єднання в стилі getaddrinfo для IPv4/IPv6.

Sodium

Розширення в комплекті PHP 7.2+; нові таємниці й AEAD — тут або в OpenSSL, не в mcrypt.

Розширення та stdlib

utf8_encode/decode у ядрі; mail/mb_send_mail з масивом заголовків; DBA+LMDB; зміни GD; session_module_name('user')recoverable error.

Рецепти

if (is_array($x) || $x instanceof \Countable) {
    $n = count($x);
}
$cls = is_object($obj) ? get_class($obj) : self::class;

(is_countable() — з 7.3.)

Зворотна несумісність

  • number_format() і рядок -0.
  • Узгоджений доступ до числових ключів після (object)/(array) — див. migration72 incompatible.
  • get_class(null)warning.
  • count()/sizeof() на не-countable → E_WARNING.
  • Mcrypt не в ядрі — лише PECL; міграція на Sodium/OpenSSL.

Deprecated

__autoload, посилені bareword-константи, create_function, each(), рядковий assert, одноаргументний parse_str, read_exif_data, gmp_random, png2wbmp/jpeg2wbmp — повний список: migration72 deprecated.

Інше

Autoconf ≥ 2.64; спрощений --with-pdo-oci; прибрано --enable-gd-native-ttf; mcrypt → PECL.


Підсумок

Видаліть mcrypt, наведіть лад з count( і get_class(, потім спокійніше переходьте на 7.3 з JsonException та is_countable().