Объединение PHP__autoload с классом Mollie_API_Autoloader

Хотя я знаю, что неуместно запрашивать готовый к использованию код, я делаю это в этом случае, так как не могу найти решение.

Попытка использовать встроенную функцию PHP __autoload вместе с классом Mollie_API_Autoloader:

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 влияет на правильное функционирование нативного класса PHP __autoload. Не могу объединить это. Как я это сделал?

1 ответ

Решение

__autoload()устарела, его заменили spl_autoloader_register() много лет назад (на PHP 5.1.2).

Они не могут работать вместе. __autoload() ограничен, и все, что он делает, spl_autoloader_register() делает лучше

Поскольку опубликованный вами класс уже использует spl_autoload_register() все, что вам нужно сделать, это позвонить

Mollie_API_Autoloader::register()

где-то в вашем бустрап-коде.

Если ваш существующий код использует __autoload() Вы можете легко изменить его, чтобы использовать spl_autoload_register(), Просто переименуйте __autoload функция к чему-то другому (скажем, old_autoloader) и добавить spl_autoload_register('old_autoloader'); после его определения.

Проверьте Пример № 1 по документации spl_autoload_register() для примера.

Другие вопросы по тегам