小编Pau*_*ema的帖子

从数组/类中计算唯一的id

我使用数据类来为我的数据提供模板,我想从数据类中的数据计算一个唯一的id,这样我就可以检查具有该数据的模板是否已经在缓存中,然后提供该版本.

所以从类数组中获取唯一id的函数可以帮助我

像这样的东西工作,但相当昂贵的md5(序列化($ classdata))

我希望有一些功能来获取唯一的ID而不序列化所有数据,或至少不必在PHP中

在此先感谢,最好,保罗

编辑:我很快就庆祝,唯一的id在当前实例中只是相同的,重新启动相同的脚本会产生另一个id,然后当然不是在使用的cache testscript中:

<?php
class foo {}
$f = new foo;
print spl_object_hash($f);
Run Code Online (Sandbox Code Playgroud)

生病了更深入的解释

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();
Run Code Online (Sandbox Code Playgroud)

现在,如果给模板引擎的数据在缓存中,它使用该版本,防止必须重新解析数据集的模板

这是一个简单的template_data视图,它实际上是延迟加载并使用memcached dataid,所以数据实际上并没有被提取,直到它在模板中使用

php arrays hash object unique-id

9
推荐指数
1
解决办法
6152
查看次数

如何在 Hogan 中处理多元化

我正在使用 Hogan.js,它与 Mustache 规范兼容。而且我在实施多元化的可靠方法时遇到了麻烦。我想继续使用 Hogan 并使用http://i18next.com/进行 i18n 处理

做这样的事情适用于简单的情况

tpl:

{{#plural(count)}}
  I have {{count}} apples!
{{/plural(count)}}
Run Code Online (Sandbox Code Playgroud)

数据:

{
  count: 2,
  'plural(count)': function () {
    return function () {
      return _t[arguments[0].trim()][this['count']]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这需要在单独的步骤中解析/扫描/渲染才能生成所有必需的复数方法(plural(key.val) 等),但这很好,它只需要在服务器启动时完成一次。

这打破了像

{{#plural(key.nested)}}

如果数据看起来像

{
  'plural(key': {
    'val)': ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这也需要我从上下文中手动查找值,这不是主要问题,但在某些情况下,可能无法解决 lambda/partials

对于默认的翻译映射,事情要简单得多,而且很容易处理

javascript plural mustache hogan.js i18next

5
推荐指数
1
解决办法
404
查看次数

标签 统计

arrays ×1

hash ×1

hogan.js ×1

i18next ×1

javascript ×1

mustache ×1

object ×1

php ×1

plural ×1

unique-id ×1