Переместить ext / hash из ресурсов в объекты php PHP 7.2 миграция

Как часть долгосрочной миграции от ресурсов, хэш
Расширение было обновлено для использования объектов вместо ресурсов.
изменение должно быть незаметным для разработчиков PHP, за исключением случаев, когда
is_resource () были проверены (которые нужно обновить до
is_object () вместо).

«Расширение хеша было обновлено использование объектов вместо ресурсов
я не понимаю

1) Где в «расширении хеша» представлено это изменение?

2) второе предложение «которое будет нуждаться в обновлении» относится, как я понимаю, к is_resource в хэш-функции (часть расширения), но как именно это происходит?
Какой будет точный пример, который «следует заменить»?

Благодарю.

1

Решение

До 7.2 такой метод …

<?php
$ctx = hash_init('md5');
var_dump($ctx);

…будет выводить что-то вроде resource(7, Hash Context), Возвращенное значение было «ресурсом».

Ресурс — это специальная переменная, содержащая ссылку на внешний
ресурс.

По состоянию на 7.2 они изменили это, чтобы вернуть фактический объект (класс) типа HashContext.

Поэтому вам, возможно, потребуется изменить способ оценки возвращаемого значения этих хеш-функций.

Где раньше вы могли просто проверить is_resource() (возможно, get_resource_type()) теперь ты будешь использовать is_a или же instanceof,

if ($h instanceof \HashContext) { ...

Действительно зависит от кода. Вам не нужно ничего менять. Зависит, если / как / где ваш код оценивает возвращаемые значения некоторых из этих функций. Материал, который вы можете найти в модульном тесте …

Например, этот код все еще будет работать до / после 7.2, хотя $ctx тип изменений:

$ctx = hash_init('md5');
hash_update($ctx, 'The quick brown fox ');
hash_update($ctx, 'jumped over the lazy dog.');
echo hash_final($ctx);
1

Другие решения

Других решений пока нет …