Spl_autoload_register没有初始化自动加载堆栈



我正在尝试使用SwiftMailer php库与我编写的程序。在包含这个库之前,我一直在使用spl_autoload_register()函数。然而,在使用这个库之前,我使用spl函数显式地定义了类扩展和位置:

set_include_path(get_include_path().[my include path]);
spl_autoload_extensions('.class.php');
spl_autoload_register();
session_start();

我遇到的问题是,现在我试图使用一个不遵循相同命名约定的库。它们自己的自动加载类(通过对库的初始调用构建)是这样的:

public static function autoload($class)
{
//Don't interfere with other autoloaders
if (0 !== strpos($class, 'Swift_'))
{
  return;
}
$path = dirname(__FILE__).'/'.str_replace('_', '/', $class).'.php';
if (!file_exists($path))
{
  return;
}
if (self::$initPath && !self::$initialized)
{
  self::$initialized = true;
  require self::$initPath;
}
require $path;

}

当我尝试在调用它们的类后简单地运行程序时,我得到:

Fatal error: spl_autoload() [<a href='function.spl-autoload'>
function.spl-autoload</a>]:Class Swift_MailTransport could not
be loaded in [my file] on line 30 

30行:

 $transport = Swift_MailTransport::newInstance();

我已经尝试使用一个自定义的自动加载类建模后,然而,所有我得到当我尝试:

var_dump(spl_autoload_functions());

结果:

bool(false);

我知道这是一个相当简单的问题,我忽略了它,但我找不到它。

试着删除这个:

spl_autoload_register();

来自文档:

[if] spl_autoload_register() is called without any parameters then 
  [spl_autoload(...)] functions will be used

知道了这一点,认为spl_autolload不知道在哪里加载你的SwiftMailer类是合乎逻辑的,因为你得到的错误说明了这一点。然后,SwiftMailer不在你的include路径中,因为spl_autolload试图从那里加载。

下一步是把你的SwiftMailer类放在其中一个包含路径中。

好吧,在我绞尽脑汁了一整天却一无所获之后,我从我的兄弟那里得到了一个很棒的反馈,他也是一个程序员。

所有的问题都源于这一行:

require_once(SITE_ROOT.'/classes/lib/swift_required.php');

SITE_ROOT变量实际上是引用web位置(即http://),与我当前的主机,这不起作用,它需要使用物理文件位置代替。做了这个修改后,所包含的自动加载器就像广告中说的那样工作了。

相关内容

  • 没有找到相关文章

最新更新