合并 PHP__autoload 与 Mollie_API_Autoloader class

Combining PHP__autoload with Mollie_API_Autoloader class

虽然我知道要求现成的代码不合适,但在这种情况下我还是这样做了,因为我找不到解决方案。

尝试将本机 PHP __autoload 函数与 Mollie_API_Autoloader class:

一起使用
class Mollie_API_Autoloader
{
/**
 * @param string $class_name
 */
public static function autoload ($class_name)
{
    if (strpos($class_name, "Mollie_") === 0)
    {
        $file_name = str_replace("_", "/", $class_name);
        $file_name = realpath(dirname(__FILE__) . 
"/../../{$file_name}.php");

        if ($file_name !== false)
        {
            require $file_name;
        }
    }
}

/**
 * @return bool
 */
public static function register ()
{
    return spl_autoload_register(array(__CLASS__, "autoload"));
}

/**
 * @return bool
 */
public static function unregister ()
{
    return spl_autoload_unregister(array(__CLASS__, "autoload"));
}
}

Mollie_API_Autoloader::register();

Mollie 自动加载器 class 影响本机 PHP __autoload class 的正常运行。似乎无法将这些结合起来。我是怎么做到的?

__autoload() is deprecated, it was replaced by spl_autoloader_register() 多年前(在 PHP 5.1.2 上)。

他们不能一起工作。 __autoload() 是有限的,它所做的一切,spl_autoloader_register() 做得更好。

由于您发布的 class 已经使用了 spl_autoload_register(),您只需调用

Mollie_API_Autoloader::register()

在你的 boostrap 代码中的某个地方。

如果您现有的代码使用 __autoload(),您可以轻松地将其更改为使用 spl_autoload_register()。只需将 __autoload 函数重命名为其他名称(比如 old_autoloader)并在其定义后添加 spl_autoload_register('old_autoloader');

查看 Example #1 on the documentation of spl_autoload_register() 示例。