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