加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 对象的真实和稳定的哈希

发布时间:2020-12-13 17:26:20 所属栏目:PHP教程 来源:网络整理
导读:我需要清楚地识别一个对象并将其标识存储在我的数据库中. 之后我需要这个ID来恢复这个对象. 我尝试使用“spl_object_hash()”(http://php.net/manual/en/function.spl-object-hash.php),但每次重新加载页面时此函数都会返回另一个值. 对于测试,此对象是稳定
我需要清楚地识别一个对象并将其标识存储在我的数据库中.
之后我需要这个ID来恢复这个对象.

我尝试使用“spl_object_hash()”(http://php.net/manual/en/function.spl-object-hash.php),但每次重新加载页面时此函数都会返回另一个值.

对于测试,此对象是稳定的并且保持不变并且完全不变.从来没有“spl_object_hash()”一次又一次地返回不同的结果我重新加载.

$foo = new stdClass();
print_r(spl_object_hash($foo));

– >每次点击刷新时都会有另一个哈希值

我需要一种方法来根据完整的对象创建一个哈希.只要对象没有,该哈希就不应该改变.

我不想为此实现自己的方法(只要没有其他可能解决我的问题),因为我需要一种快速,简单和统一的方法来识别我的对象.

此外,我不想为此目的使用Sessions.

那么我该怎么做才能解决这个问题呢?

非常感谢&友好的问候!

解决方法

您可以使用serialize调用(使用overriden __sleep()魔术调用)来序列化对象,以获得唯一的哈希:

$hash = md5(serialize($myObject));

此外,在存储一些额外数据的对象(如PDO处理程序,文件句柄)中,您可以覆盖__sleep()和__wakeup()方法以获取/设置对象数据,例如来自http://www.php.net/manual/en/language.oop5.magic.php#object.sleep的代码

<?php
class Connection
{
    protected $link;
    private $dsn,$username,$password;

    public function __construct($dsn,$password)
    {
        $this->dsn = $dsn;
        $this->username = $username;
        $this->password = $password;
        $this->connect();
    }

    private function connect()
    {
        $this->link = new PDO($this->dsn,$this->username,$this->password);
    }

    public function __sleep()
    {
        return array('dsn','username','password');
    }

    public function __wakeup()
    {
        $this->connect();
    }
}?>

这应该为您提供良好的对象哈希,更好的是,您可以配置要用于创建哈希的字段.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读