spl_object_hash for PHP <5.2(对象实例的唯一ID)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了spl_object_hash for PHP <5.2(对象实例的唯一ID),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2320字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试在PHP 5中获取对象实例的唯一ID.
函数spl_object_hash()可以从PHP 5.2获得,但我想知道是否有旧的PHP版本的解决方法.
php.net上的评论中有几个函数,但它们并不适合我.第一个(简化):
function spl_object_hash($object){
if (is_object($object)){
return md5((string)$object);
}
return null;
}
不适用于本机对象(如DOMDocument),第二个:
function spl_object_hash($object){
if (is_object($object)){
ob_start();
var_dump($object);
$dump = ob_get_contents();
ob_end_clean();
if (preg_match('/^object\(([a-z0-9_]+)\)\#(\d)+/i', $dump, $match)) {
return md5($match[1] . $match[2]);
}
}
return null;
}
看起来它可能是一个主要的性能破坏者!
有人有什么东西吗?
解决方法:
我跑了几个快速测试.我真的认为你最好使用bind(‘evt_name’,array($obj,’callback_function’))在bind()函数中存储真正的回调.如果您绝对想要使用spl_object_hash路由,而不是使用事件绑定存储引用,那么您正在查看以下内容:
var_dump / extract和hash id实现:
function spl_object_hash_var_dump($object){
if (is_object($object)){
ob_start();
var_dump($object);
$dump = ob_get_contents();
ob_end_clean();
if (preg_match('/^object\(([a-z0-9_]+)\)\#(\d)+/i', $dump, $match)) {
return md5($match[1] . $match[2]);
}
}
return null;
}
一个天真的参考实现:
function spl_object_dumb_references(&$object) {
static $hashes;
if (!isset($hashes)) $hashes = array();
// find existing instance
foreach ($hashes as $hash => $o) {
if ($object === $o) return $hash;
}
$hash = md5(uniqid());
while (array_key_exists($hash, $hashes)) {
$hash = md5(uniqid());
}
$hashes[$hash] = $object;
return $hash;
}
这个基本上比基于类的参考函数差5-50倍,所以不值得担心.
商店通过类实现引用:
function spl_object_hash_references(&$object) {
static $hashes;
if (!isset($hashes)) $hashes = array();
$class_name = get_class($object);
if (!array_key_exists($class_name, $hashes)) {
$hashes[$class_name] = array();
}
// find existing instance
foreach ($hashes[$class_name] as $hash => $o) {
if ($object === $o) return $hash;
}
$hash = md5(uniqid($class_name));
while (array_key_exists($hash, $hashes[$class_name])) {
$hash = md5(uniqid($class_name));
}
$hashes[$class_name][$hash] = $object;
return $hash;
}
你最终得到了results that look like this.总结:基于类的引用实现在n / 50类中表现最佳 – 在最好的情况下,它设法将基于var_dump的实现的性能提高了1/3,而且通常情况更糟.
var_dump实现似乎是可以容忍的,虽然不理想.但是如果你没有做太多这些查找,那么它就不会成为你的瓶颈.特别是作为PHP的后备< 5.2 boxen.
内容总结
以上是互联网集市为您收集整理的spl_object_hash for PHP <5.2(对象实例的唯一ID)全部内容,希望文章能够帮你解决spl_object_hash for PHP <5.2(对象实例的唯一ID)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。