У меня есть несколько расширений, которые используют один и тот же класс библиотеки. Библиотека поставляется в комплекте с каждым расширением и, конечно же, не всегда актуальна. Код прост:
class Library { function1 (){ ... } function2 (){ ... } }
Допустим, у нас есть 2 расширения: у одной есть более старая версия библиотеки, одна – более новая. В новой библиотеке вводятся новые функции (function3 () и function4 ()). Задача проста: мне нужно загрузить класс библиотеки из определенной папки, чтобы иметь возможность использовать новые функции. По умолчанию, когда оба расширения активны на одной и той же странице, он загружает класс библиотеки из расширения, который идет первым.
Кажется, я не могу найти лучшее решение для этого. Я знаю об пространствах имен (но никогда не использовал их раньше), но они требуют изменений в библиотечных файлах. Мне нужно иметь «namespace ExtensionName»; в начале library.php.
Есть ли способ избежать каких-либо дополнительных изменений в библиотечных файлах?
Было бы неплохо просто загрузить кучу функций из определенного файла, упаковать их в некоторый динамически названный класс и затем инициализировать его.
ОБНОВИТЬ
Просто чтобы прояснить все это. Скажем, у меня есть два расширения:
Расширение 1 Расширение 2
Обе из них имеют «системную» папку с двумя системными классами:
class SystemClassHelper { function addStuff() { ... } }
а также
SystemClassModel { function getStuff() { ... } }
Единственное отличие состоит в том, что Extension 2 имеет более новые версии системных классов с дополнительными функциями:
function addMoreStuff() { ... }
а также
function getMoreStuff() { ... }
Оба расширения широко используют эти системные классы и могут выполняться одновременно. Это означает, что они оба будут использовать системные классы из расширения, которое было выполнено в первую очередь. Но если сначала выполняется Extension 1, Extension 2 вызовет ошибку при вызове новых функций (нет новых функций в Extension 1, помните?).
Задача проста: мне нужно загружать системные классы для каждого расширения специально, чтобы иметь возможность использовать новые функции там, где это необходимо, и я хочу, чтобы это было сделано без добавления пространств имен. И, конечно же, без ошибки «не могу переопределить класс».
Пока я просто использую это в начале каждого системного класса:
namespace Extension1
а также
namespace Extension2
Это работает, но требует, чтобы вы постоянно вносили изменения в системные классы и добавляли пространство имен. Я хочу просто скопировать папку «system» в другое расширение и загрузить классы непосредственно из этой папки.