0

不久前我写了这个小函数来根据传递的参数创建一个唯一的 id。我的问题是,是否有更好的(性能)方法来解决这个问题。

function id_make(/* POLYMORPHIC */)
{
    return md5(serialize(func_get_args()));
}

echo id_make(__FILE__, 'something', ['item' => 'some_content']);
4

3 回答 3

1

对于给定的函数签名,没有太多需要改进的地方——连续 3 个链式函数调用可以精确地执行您希望它们执行的操作,因此无需优化或剥离。

鉴于这 3 个函数调用或多或少归结为内部编译的本机功能,我也不认为有一种替代方法可以提供相同级别的灵活性,而不会产生可能的冲突。

所以不,这个功能没有什么需要改进的。如果您需要这种灵活的散列,外部代码可能会使用一些优化。

于 2013-05-27T15:07:17.643 回答
1

crc32 似乎比 md5 快一点(http://www.php.net/manual/en/function.crc32.php

json_encode() 也比 serialize() 快一点。

于 2013-05-27T15:10:31.307 回答
1

我猜想在尝试将相当大的对象作为参数传递时会出现性能问题?

我不知道您的脚本的目的,但也许这可能会有所帮助。也许你应该循环遍历参数,当它是一个对象时,你可以用它的哈希替换它。见: http: //php.net/manual/en/function.spl-object-hash.php

但是因为正如我所说我不知道​​目的,您应该注意,当对象被销毁时,可能会重新使用相同的哈希值。

于 2013-05-27T15:11:12.290 回答