PHP 8.4.0 RC4 available for testing

Новые возможности

Новый тип object

Был введён новый тип, object, который может использоваться в передаваемых параметрах (контравариантность) и возвращаемых значениях (ковариантность) для любых объектов.

<?php

function test(object $obj) : object
{
return new
SplQueue();
}

test(new stdClass());

Загрузка модуля по имени

Для подгружаемых модулей больше не требуется указание расширения файла (.so для Unix или .dll для Windows). Это допускается в файле php.ini, а также в функции dl().

Разрешено переопределение абстрактных методов

Абстрактные методы теперь можно переопределить, в случаях когда абстрактный класс наследуется от другого абстрактного класса.

<?php

abstract class A
{
abstract function
test(string $s);
}
abstract class
B extends A
{
// переопределён - всё ещё сохраняя контравариантность для параметров и ковариантность для возвращаемых значений
abstract function test($s) : int;
}

Sodium теперь является основным модулем

Современная криптографическая библиотека Sodium теперь стала основным модулем в PHP (как модуль sodium).

Смотрите раздел Sodium для получения полной информации.

Добавлено хеширование пароля с помощью Argon2

Был добавлен алгоритм Argon2 в API хеширования пароля, где доступны следующие константы:

Расширенные типы строк для PDO

Тип строки PDO был расширен для поддержки национальных наборов символов при эмуляции подготавливаемых запросов. Добавлены новые константы:

Эти константы используется в побитовом OR с константой PDO::PARAM_STR:

<?php

$db
->quote('über', PDO::PARAM_STR | PDO::PARAM_STR_NATL);

Дополнительная отладочная информация при эмуляции подготавливаемых запросов в PDO

Метод PDOStatement::debugDumpParams() был обновлён, чтобы включить SQL до отправки в БД, где будет показан полный необработанный запрос (включая заменённые параметры с их связанными значениями). Это было добавлено для помощи в отладке эмуляции подготавливаемых запросов (и поэтому это будет доступно только при включённой эмуляции подготавливаемых запросов).

Поддержка расширенных операций в LDAP

Была добавлена поддержка EXOP в модуль LDAP. Стали доступны следующие функции и константы:

Информация об адресе в модуле сокетов

Модуль сокетов теперь имеет возможность искать адресную информацию, а также подключаться к ней, связываться с ней и объяснять её. Для этого были добавлены следующие четыре функции:

Расширение типа параметра

Типы параметров из переопределённых методов и реализаций интерфейсов теперь могут быть опущены. Это всё ещё соответствует LSP, так как параметры типов контравариантны.

<?php

interface A
{
public function
Test(array $input);
}

class
B implements A
{
public function
Test($input){} // тип параметра не указан $input
}

Разрешена завершающая запятая для сгруппированных пространств имён

Завершающая запятая теперь может быть добавлена в синтаксис группировки use, появившегося в PHP 7.0.

<?php

use Foo\Bar\{
Foo,
Bar,
Baz,
};

Поддержка proc_nice() для Windows

Функция proc_nice() теперь поддерживается в Windows.

Поддержка порядка байт в pack() и unpack()

Функции pack() и unpack() теперь поддерживают типы float и double как в прямом, так и в обратном порядке байт.

Улучшения в модуле EXIF

Модуль EXIF обновлён для поддержки большего числа форматов. Это означает, что специфичные теги правильно обрабатываются при разборе изображений функцией exif_read_data(). Новые поддерживаемые форматы:

  • Samsung
  • DJI
  • Panasonic
  • Sony
  • Pentax
  • Minolta
  • Sigma/Foveon
  • AGFA
  • Kyocera
  • Ricoh
  • Epson

Функции exif_read_data() и exif_thumbnail() теперь принимают потоки в качестве своих первых аргументов.

Новая функциональность в PCRE

  • Добавлен модификатор J для установки PCRE_DUPNAMES.

SQLite3 позволяет записывать BLOB

Теперь SQLite3::openBlob() умеет открывать поля типа BLOB для записи. Раньше для таких полей было доступно только чтение.

Обратные вызовы Oracle OCI8 Transparent Application Failover

Добавлена поддержка обратных вызовов Oracle Database Transparent Application Failover (TAF). TAF позволяет приложениям PHP OCI8 автоматически переподключаться к предварительно сконфигурированной базе данных при нарушении соединения. Новая поддержка обратного вызова TAF позволяет приложениям отслеживать и контролировать переподключение во время восстановления.

Улучшения в модуле ZIP

Добавлена поддержка чтения и записи зашифрованных архивов (требуется libzip 1.2.0).

Класс ZipArchive теперь реализует интерфейс Countable.

Поток zip:// теперь принимает контекстную опцию 'password'.

Добавить

Примечания пользователей 2 notes

up
3
antonfedonyuk at gmail dot com
3 years ago
Note: "omitted" = "removed":
<?php
declare(strict_types=1);

interface
ITest
{
public function
run(array $input);
}

class
Test implements ITest
{
public function
run($input) {
return
$input;
}
}

echo (new
Test())->run('foo'); // display foo, no error
?>
up
-3
info at ensostudio dot ru
4 years ago
Note: you cant change parameter type for abstract method defined in interface.
<?php
abstract class AbstractAssocArray imlements ArrayAccess
{
abstract public function
offsetSet($offset, $value): void;
...
}
abstract class
AbstractAssocArray2 extends AbstractAssocArray
{
abstract public function
offsetSet(string $offset, $value): void;
}
class
AssocArray extends AbstractAssocArray2
{
public function
offsetSet(string $offset, $value): void
{
$this->{$offset} = $value;
}
}
?>
It's throw fatal error: Declaration of AbstractAssocArray::offsetSet(string $offset, $value): void must be compatible with AbstractAssocArrayAccess::offsetSet($offset, $value).
To Top