题
本质上,我有一个 PHP 页面,它调用一些其他 HTML 通过对象的方法呈现。它看起来像这样:
我的 PHP 页面:
// some content...
<?php
$GLOBALS["topOfThePage"] = true;
$this->renderSomeHTML();
?>
// some content...
<?php
$GLOBALS["topOfThePage"] = false;
$this->renderSomeHTML();
?>
第一个方法调用已缓存,但我需要 renderSomeHTML() 根据其在页面中的位置显示略有不同。我尝试传递到 $GLOBALS,但该值没有改变,所以我假设它正在被缓存。
如果不通过方法传递参数或不缓存它,这是否不可能?任何帮助表示赞赏。这不是我的应用程序——这是 Magento。
编辑:
这是 Magento,它看起来正在使用 memcached。我尝试通过 renderSomeHTML() 传递参数,但是当我在要渲染的 PHP include 上使用 func_get_args() 时,输出的并不是我放入其中的内容。
编辑:
接下来,我能够通过调用提取相同内容的不同方法并传入关闭缓存的参数来使缓存“无效”。感谢大家的帮助。
解决方案
显然,你不能。缓存的重点是你缓存的“东西”不会改变。所以你要么:
- 提供一个参数
- 避免缓存
- 当您设置不同的参数时使缓存失效
或者,您自己重写缓存机制 - 以支持某些动态绑定。
其他提示
不同的框架对 Chaching 的处理方式不同,因此您必须帮助我们提供更多信息。但我也想知道你是否可以将其作为参数传递而不是使用 $GLOBALS.
$this->renderSomeHTML(true);
您的问题似乎不清楚,但缓存几乎意味着“存储,这样我们就不必再次计算”。如果您希望内容有所不同,则需要缓存更多结果并选择正确的缓存对象来发回。
需要更多信息才能给出更好的答案。Smarty,什么在缓存文档?“它在页面中的位置”是什么意思?它是什么'?
不隶属于 StackOverflow