Автозагрузка библиотек

Я использую

function __autoload($class_name) {
    $file_name = str_replace("\\", DIRECTORY_SEPARATOR, $class_name) . '.php';
    include $file_name;
}

чтобы загрузить мои классы. И все отлично, но теперь я хочу использовать внешнюю библиотеку с другим соглашением об именах Services_Twilio (и я сохранил библиотеку в /code/twilio/Services/Twilio.php)

Теперь PHP говорит Предупреждение: include(Services_Twilio.php): не удалось открыть поток: Как я могу обработать эти случаи? Должен ли я исключить этот класс? Я также обнаружил, что у библиотеки есть собственный автозагрузчик.


person handsome    schedule 26.04.2016    source источник
comment
Используйте Composer, это менеджер пакетов проекта PHP, который обрабатывает автозагрузку и т. д. для всех пакетов.   -  person JimL    schedule 26.04.2016
comment
можно ли использовать композитор для загрузки моих собственных библиотек? не получает все от packagist?   -  person handsome    schedule 02.05.2016
comment
Вам нужно будет написать библиотеки для композитора, хотя вы можете разместить их самостоятельно или вытащить их из github/gitlab/etc.   -  person JimL    schedule 02.05.2016


Ответы (1)


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

Ваш собственный автозагрузчик должен дать возможность их автозагрузчику действовать. Вы должны сделать это:

function __autoload($class_name) {
    $file_name = str_replace("\\", DIRECTORY_SEPARATOR, $class_name) . '.php';

    if (file_exists($file_name)) {
        include $file_name;
    }
}

Если ваш автозагрузчик не может найти файл, он ничего не делает. Поэтому предупреждение, которое вы получили, исчезнет. Кроме того, может сработать автозагрузчик пакета.

Вы также можете рассмотреть http://php.net/manual/de/function.spl-autoload-register.php

person colburton    schedule 26.04.2016