2015-02-26 4 views
1

Я пишу простое приложение PHP, которое использует Swift Mailer library. В моем приложении не используются пространства имен или композитор.Swift Mailer ruins autolading

Однако, после запроса 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, возможно ли это?

спасибо.

ответ

1

Вместо __autoload() вы должны использовать spl_autoload_register.

If there must be multiple autoload functions, spl_autoload_register() allows for this. It effectively creates a queue of autoload functions, and runs through each of them in the order they are defined. By contrast, __autoload() may only be defined once.

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; 
     } 
    } 
}); 
Смежные вопросы