我使用一个数据类来为模板提供我的数据,我想从数据类中的数据计算一个唯一的 id,这样我就可以检查带有该数据的模板是否已经在缓存中,然后提供该版本。
所以从类的数组中获取唯一ID的函数会帮助我。
像这样的东西有效但相当昂贵md5(serialize($classdata))
我希望有一些函数可以在不序列化所有数据的情况下获取唯一 ID,或者至少不必在 php.ini 中序列化所有数据。
编辑:
我庆祝得太早了,唯一的 id 仅在当前实例中相同,重新启动同一脚本会生成另一个 id,然后当然不在缓存中。
使用的测试脚本:
<?php
class foo {}
$f = new foo;
print spl_object_hash($f);
我会更深入地解释
class template_data implements IteratorAggregate, ArrayAccess, Countable {
private $_data;
//some methods for the overloaded classes
//
//the getId function
public function getId() {
return hash('md5',serialize($this->_data));
}
}
$t = new template('file');
$d = new template_data('some data');
$t->addData($d);
$t->display();
现在,如果提供给模板引擎的数据在缓存中,它会使用该版本,从而不必重新解析数据集的模板。
这是 template_data 的简单视图,它实际上是延迟加载并使用 memcached dataid,因此在模板中使用数据之前不会实际获取数据。