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

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

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

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

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

Спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

До 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);
...