将 ext/hash 从资源移动到对象 php PHP 7.2 迁移

Move ext/hash from resources to objects php PHP 7.2 migration

As part of the long-term migration away from resources, the Hash extension has been updated to use objects instead of resources. The change should be seamless for PHP developers, except for where is_resource() checks have been made (which will need updating to is_object() instead).

Hash extension 已更新为使用对象而不是资源 我不明白

1) 在 "hash extension" 中哪里有这种变化?

2)第二句"which will need update",指的是,我理解为Hash函数(扩展部分)中的is_resource,但是,究竟是怎么回事? 哪个是 "should be replaced" ?

的确切示例

谢谢。

7.2 之前的方法,如...

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

...会输出类似 resource(7, Hash Context) 的内容。 returned 值为 "resource"。

A resource is a special variable, holding a reference to an external resource.

从 7.2 开始,他们将其更改为 return 类型为 HashContext 的实际对象 (class)。

因此,您可能需要更改计算这些哈希函数的 return 值的方式。

以前您可能只是检查 is_resource()(可能 get_resource_type()),现在您可以使用 is_ainstanceof

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

真的取决于代码。您可能不需要更改任何内容。取决于 if/how/where 您的代码评估其中一些函数的 return 值。您可能会在单元测试中找到的东西...

例如,即使 $ctx 更改类型:

,此代码仍可用于 pre/post 7.2
$ctx = hash_init('md5');
hash_update($ctx, 'The quick brown fox ');
hash_update($ctx, 'jumped over the lazy dog.');
echo hash_final($ctx);