不久前我写了这个小函数来根据传递的参数创建一个唯一的 id。我的问题是,是否有更好的(性能)方法来解决这个问题。
function id_make(/* POLYMORPHIC */)
{
return md5(serialize(func_get_args()));
}
echo id_make(__FILE__, 'something', ['item' => 'some_content']);
不久前我写了这个小函数来根据传递的参数创建一个唯一的 id。我的问题是,是否有更好的(性能)方法来解决这个问题。
function id_make(/* POLYMORPHIC */)
{
return md5(serialize(func_get_args()));
}
echo id_make(__FILE__, 'something', ['item' => 'some_content']);
对于给定的函数签名,没有太多需要改进的地方——连续 3 个链式函数调用可以精确地执行您希望它们执行的操作,因此无需优化或剥离。
鉴于这 3 个函数调用或多或少归结为内部编译的本机功能,我也不认为有一种替代方法可以提供相同级别的灵活性,而不会产生可能的冲突。
所以不,这个功能没有什么需要改进的。如果您需要这种灵活的散列,外部代码可能会使用一些优化。
crc32 似乎比 md5 快一点(http://www.php.net/manual/en/function.crc32.php)
json_encode() 也比 serialize() 快一点。
我猜想在尝试将相当大的对象作为参数传递时会出现性能问题?
我不知道您的脚本的目的,但也许这可能会有所帮助。也许你应该循环遍历参数,当它是一个对象时,你可以用它的哈希替换它。见: http: //php.net/manual/en/function.spl-object-hash.php
但是因为正如我所说我不知道目的,您应该注意,当对象被销毁时,可能会重新使用相同的哈希值。