我需要清楚地识别一个对象并将其标识存储在我的数据库中。 之后我需要这个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。
那么我该怎么做才能解决这个问题?
非常感谢&友好的问候!
答案 0 :(得分:4)
您可以使用序列化调用(使用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, $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();
}
}?>
这应该为您提供良好的对象哈希,更好的是,您可以配置要用于创建哈希的字段。
答案 1 :(得分:1)
您可以随时执行此操作:
function object_hash($object, $algorithm = 'md5') {
$serialized_object = serialize($foo);
return hash($algorithm, $serialized_object);
}
$foo = new stdClass();
print_r(object_hash($foo));