Swift Mailer废墟自动化

时间:2015-02-26 10:07:16

标签: php autoload swiftmailer autoloader

我正在编写使用Swift Mailer library的简单PHP应用程序。我的应用程序不使用名称空间也不使用作曲家。

但是,在要求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 个答案:

答案 0 :(得分:1)

而不是__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;
        }
    }
});