PHP数组通过引用传递?

时间:2015-04-25 23:30:11

标签: php arrays typo3 pass-by-reference pass-by-value

我一直在寻找这个问题的答案,但我到目前为止还没有回答这个问题。

我们有一个TYPO3网站,已对索引进行了配置和安装。我们使用抓取工具扩展程序抓取记录(~60000)。一切都已配置好并且运行正常但我们看到一些记录没有出现在搜索结果中。

我调试了TYPO3代码,发现有些单词与index_rel表中的记录无关。

我发现当正在运行的代码在第573行进入方法indexTypo3PageContent()时,调用方法checkWordList(),并将一组单词作为参数传递。在方法内部,有一些数组值未设置。这是错误的地方,因为如果我是正确的,数组是通过值传递的,但是方法checkWordList()之外的数组被更改,则字数较少。因此,有些单词不会被反向索引到其记录中。

我可以更改代码。这很容易。但是我想了解这个问题。这是一个PHP错误吗? Aren的PHP数组是按值传递的吗?我在Ubuntu上使用PHP 5.5。

如果有人能够暗示发生了什么,我将非常感激。

无论如何,我在TYPO3错误系统上发布了一个错误。

贝斯茨,

1 个答案:

答案 0 :(得分:0)

数组确实通过值传递(或者如果它们未在函数或方法中修改,则某些引用指向,请参阅上面的Rohit注释)。

我认为阵列不同但不是。这只是疲劳。在深夜调试效率不高。

无论如何,我在深入研究代码后发现了这个问题。我正在使用TYPO3 4 LTS版本的indexed_search。

索引器的方法indexAnalyze调用另外两个方法:analyzeHeaderInfo和analyzeBody。两种方法几乎完全相同,只是analyzeHeaderInfo没有设置第一个(第一次出现),这实际上是一个数组索引。然后在方法submitWords中,当使用unset first进行查询时,MySQL会抱怨首先为NULL。因此不进行插入。由于代码清理,这在新版本上不会发生。正如在提供的代码链接中可以看到的那样,有一个类型转换为int,因此如果第一个未设置它将为零而不是null。人们仍然可以讨论第一次出现等于零的每个元数据的语义,但这是另一个故事。

希望这可以帮助有人使用TYPO3和旧的indexed_search。 ; - )