2016-04-26 4 views
0

I'm с помощьюАвтоматическая загрузка библиотеки

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): не удалось открыть поток: Как я могу hanndle эти случаи? Должен ли я исключать этот класс? Я также обнаружил, что библиотека имеет собственный автозагрузчик.

+0

Используйте [Composer] (https://getcomposer.org/doc/00-intro.md), это PHP менеджер пакетов проекта, который обрабатывает автозагрузку/etc для всех пакетов. – JimL

+0

можно использовать композитор для загрузки моих собственных библиотек? не получает все от упаковывающего? – handsome

+0

Вам нужно будет писать библиотеки для композитора, вы могли бы самостоятельно их разместить или вытащить их из github/gitlab/etc. – JimL

ответ

0

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

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

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

Смежные вопросы