Интеграция двух приложений PHP, которые используют одинаковые имена классов, имена переменных

Я пытался интегрировать opencart и phpbb, но столкнулся с проблемами. Под интеграцией я имею в виду, когда пользователь входит в opencart или phpbb, он входит на оба сайта (что отлично сработало для меня, так как это включало только вставку соответствующих данных в БД opencart во время входа в phpbb и наоборот)

Проблема возникла, когда я должен начать получать сообщения phpbb на самой странице opencart. Я следил за этой веткой.

wiki.phpbb.com/Practical.Displaying_posts_and_topics_on_external_pages

В конечном итоге следующая строка включает почти все классы/функции в phpbb.

include($phpbb_root_path . 'common.' . $phpEx);

Теперь в обоих есть классы с одинаковыми именами (например, Cache, Session, Template). Я переименовал все конфликтующие классы в PHP, чтобы продолжить, но обнаружил, что есть глобальные переменные с таким же именем. Даже глобальные переменные, такие как $db, имели одинаковые имена. Для обычных функций мне просто нужно тщательно удалить повторяющиеся функции.

Может ли кто-нибудь сказать мне, как интегрировать два приложения php, которые имеют общие имена классов, функции и глобальные переменные?

Я подумал, что если ничего не работает, я бы получил доступ к phpbb из opencart как запрос/ответ ajax, так что phpbb по-прежнему остается другим приложением. Например, отправьте запрос ajax, чтобы получить сообщения (передав идентификатор темы, чтобы сказать http url/forum и прочитать ответ, который я получаю от сценария) и напишите этот ответ на экране opencart.


person user3213390    schedule 20.01.2014    source источник


Ответы (1)


Здесь у Вас, наверное, только один вариант: пусть ОС или ББ запускаются в подпапке/поддомене/другом домене и т.д. Не интегрируйте их, как Вы говорите.

Вместо этого создайте собственный API (это был бы самый чистый способ) на стороне ББ и API-клиент на другой стороне (API будет содержать методы, предоставляющие необходимые данные).

Другим решением является внедрение новых моделей в OC (возможно, путем простого копирования из BB), которые будут напрямую считывать данные из базы данных BB, чтобы вы могли вызывать их в своих контроллерах OC и отображать данные обычным способом, которым это делает OC. , Это также считается чистым раствором.

person shadyyx    schedule 21.01.2014
comment
Интеграция двух сложных программ, вероятно, никогда не будет хорошей идеей, поскольку вы столкнетесь с несколькими сложными проблемами, которые только усугубляются. Храните их отдельно, как было предложено, и реализуйте свою собственную дополнительную логику, когда это действительно необходимо. - person ToBe; 21.01.2014