Я пишу простое приложение PHP, которое использует Библиотека Swift Mailer. Мое приложение не использует ни пространства имен, ни композитора.
Однако после того, как требуется swift_required.php
мои (модельные) классы не найдены (Неустранимая ошибка: класс «Формат» не найден бросается PHP интерпретировать).
Autolading
define("_DOCUMENT_ROOT", str_replace("//", "/", $_SERVER['DOCUMENT_ROOT'] . "/"));
function __autoload($class_name) {
$file_name = $class_name . '.php';
$include_foleder = array("php/model/", "templates/","cron/crons_tasks/");
foreach ($include_foleder as $folder) {
$abs_path = _DOCUMENT_ROOT . $folder . $file_name;
if (file_exists($abs_path)) {
require_once $abs_path;
}
}
}
Проблемная часть функции
$bar = Format::bar($foo); //works fine
require_once _DOCUMENT_ROOT . "php/lib/swiftmailer-master/lib/swift_required.php"; //works fine
$bar = Format::bar($foo); //Class not found
Учебный класс Format
мой пользовательский класс, расположенный в _DOCUMENT_ROOT . php/model/Format.php
, Также не найдены другие пользовательские классы (из папки модели) после запроса Swift Mailer.
Так что я предполагаю, что моя прежняя автозагрузка каким-то образом переопределена Swift Mailer, возможно ли это?
Спасибо.
Вместо __autoload () вы должны использовать spl_autoload_register.
Если должно быть несколько функций автозагрузки, spl_autoload_register ()
позволяет это. Эффективно создает очередь функций автозагрузки,
и проходит через каждого из них в порядке, в котором они определены. От
напротив, __autoload () может быть определен только один раз.
http://php.net/manual/en/function.spl-autoload-register.php
define("_DOCUMENT_ROOT", str_replace("//", "/", $_SERVER['DOCUMENT_ROOT'] . "/"));
spl_autoload_register(function($class_name) {
$file_name = $class_name . '.php';
$include_folder = array("php/model/", "templates/","cron/crons_tasks/");
foreach ($include_folder as $folder) {
$abs_path = _DOCUMENT_ROOT . $folder . $file_name;
if (file_exists($abs_path)) {
require_once $abs_path;
}
}
});
Других решений пока нет …