【发布时间】:2015-07-18 12:48:23
【问题描述】:
我有以下班级的单身人士。我想要实现的是收集对整个应用程序中调用的各种数据库结果数组的引用,然后最终向数据库发出一个请求并获取一些替换值(翻译),而不是为每个查询都这样做。
撇开这种方法的优缺点不谈,我不能做的是每次发送查询时通过引用传递给translate() 方法的“原始”值(数据库结果)的实际替换。到数据库服务器。
class Translator {
public $translatableTables = ['content' => ['title', 'body']];
private $table = 'translations';
private $queue = array();
public function translate($table, &$results)
{
if(!isset($this->queue[$table])) {
$this->queue[$table] = array();
}
$this->queue[$table][] =& $results;
}
public function fetchTranslations()
{
foreach($this->queue as &$table) {
foreach($table as &$results) {
foreach($results as &$result) {
$result->content = 'DON\'T PANIC THIS IS A TEST';
}
}
}
var_dump($this->queue);
// dumps just the right data, so I know it's all been collected
}
}
在请求生命周期即将结束时(但在生成输出之前),我正在同一个单例实例上调用 fetchTranslations() 方法。
我期望发生的是将原始值替换为字符串 DON'T PANIC THIS IS A TEST 但这不起作用。
有什么想法/想法吗?
编辑:3 个嵌套的 foreach 循环可能看起来很糟糕,但这是该方法中实际业务逻辑的简短版本,与问题无关,为了便于阅读而跳过。
编辑:事实证明,我应该将每个 foreach 值作为参考。这是代码的一个真正问题,但在进行上述更改后,它仍然显示相同的行为(或者更准确地说,没有显示预期的行为)。
【问题讨论】:
标签: php arrays class pointers reference