PHP массив передается по ссылке?

Я искал ответ на этот вопрос, который у меня есть с массивом, но пока нет ответа ни здесь, ни в Интернете.

У нас есть веб-сайт TYPO3, на котором настроен и установлен индексированный поиск. Мы сканируем записи (~ 60000), используя расширение сканера. Все было настроено и работает нормально, но мы увидели, что некоторые записи не появляются в результатах поиска.

Я отладил код TYPO3 и обнаружил, что некоторые слова не были связаны с его записями в таблице index_rel.

Я обнаружил, что когда в код входит метод indexTypo3PageContent () по линии 573 метод checkWordList () вызывается с массивом слов, переданных в качестве аргумента. Внутри метода есть неустановленные значения некоторых массивов. Вот где что-то не так, потому что, если я прав, массив передается по значению, однако массив вне метода checkWordList () изменяется, слов меньше. Поэтому некоторые слова не будут обратно проиндексированы в своей записи.

Я могу изменить код. Это очень просто. Однако я хочу понять проблему. Это ошибка PHP? Разве PHP-массивы не передаются по значению? Я использую PHP 5.5 на Ubuntu.

Если кто-нибудь может дать намек на то, что происходит, я буду очень признателен.

В любом случае, я публикую ошибку в системе ошибок TYPO3.

Bests,

B.

0

Решение

Массивы действительно передаются по значению (или, как некоторые указали по ссылке, если они не были изменены в функции или методе, см. Комментарий Rohit выше).

Я думал, что массивы были разные, но не были. Это была просто усталость. Отладка в поздние часы не является продуктивной.

Во всяком случае, я нашел проблему после того, как копался в коде. Я использую TYPO3 4 LTS версию indexed_search.

Метод indexAnalyze индексатора вызывает два других метода: analysisHeaderInfo и analyBody. Оба метода практически идентичны, за исключением того, что analysisHeaderInfo не устанавливает первым (первое вхождение), которое на самом деле является индексом массива. Тогда в методе submitWords, когда сначала выполняется запрос с неустановленным значением, MySQL жалуется, что сначала NULL. Поэтому вставка не производится. Это не происходит в более новой версии из-за очистки кода. Как видно из приведенной ссылки на код, есть тип, приведенный к типу int, поэтому, если first не установлен, он будет нулевым, а не нулевым. Можно все еще обсуждать семантику каждого метаданного с первым появлением, равным нулю, но это другая история.

Надеюсь, что это может помочь кому-то, использующему и старый indexed_search из TYPO3. 😉

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]