gpt4 book ai didi

php - 真实稳定的对象哈希

转载 作者:可可西里 更新时间:2023-10-31 22:43:41 24 4
gpt4 key购买 nike

我需要清楚地识别一个对象并将其标识存储在我的数据库中。之后我需要这个 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));

-> 每次我点击刷新时另一个散列

我需要一种根据完整对象创建散列的方法。只要对象不改变,这个散列就不应改变。

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

此外,我不想为此目的使用 session 。

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

在此先致谢并致以友好的问候!

最佳答案

您可以使用序列化调用(覆盖 __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, $username, $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();
}
}?>

这应该会为您提供一个良好的对象散列,更好的是,您可以配置要使用哪些字段来创建散列。

关于php - 真实稳定的对象哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21237053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com