我正在编写使用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覆盖,这可能吗?
谢谢。
答案 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;
}
}
});