У меня очень простая функция spl_autoload_register:
spl_autoload_register(function($file) {
require_once str_replace('\\', '/', $file) . '.php';
});
С моими уроками все работает нормально.Я использую пространство имен в начале каждого класса и использую его как $class = new \system\controller\Front();
.
Но теперь я хотел бы использовать эту внешнюю библиотеку / класс https://github.com/leafo/lessphp/blob/master/lessc.inc.php. Я также добавил пространство имен в началеnamespace system\lib\less;
и пытался использовать метод compileFile()
, но я получаю ошибку Warning: require_once(lessc.php): failed to open stream: No such file or directory in
.
Я обнаружил, что первая инициализация класса lessc()
прошла успешно, но ошибка в строке no. 2442
- $commentSingle = lessc::preg_quote(self::$commentSingle);
, где используется lessc::
.
Моя spl_autoload_register
функция не может обработать это, потому что не добавлено пространство имен перед именем класса, и попробуйте загрузить только lessc.php
file.
Мой вопрос заключается в том, как глобально исправить это для всех других классов / библиотек, которые я хотел бы добавить в свой проект, не редактируя их (путем добавления пространств имен).Есть ли какое-нибудь решение, как это исправить?
Единственное решение, которое я обнаружил, это изменить мою функцию spl_autoload_register
на что-то подобное, что, кажется, работает, но я не знаю, если это такправильное и лучшее решение, и я не знаю, будет ли это работать для всех внешних библиотек, которые я хотел бы использовать.
spl_autoload_register(function($file) {
// external libraries
if ($file === 'lessc') $file = 'system/lib/less/lessc';
require_once str_replace('\\', '/', $file) . '.php';
});