Я использую Amazon Payments PHP SDK, и __autoload () прекрасно работает в браузере, но когда я переключаюсь на свои скрипты CLI, кажется, что эта функция не вызывается.
Все, что я получаю, это «Неустранимая ошибка PHP: класс ‘OffAmazonPaymentsService_Client’ не найден».
Я добавил отладку в функцию __autoload (), чтобы отобразить вызываемую функцию, пути к файлам и ничего не печатать в терминале, только в браузере.
Я сделал print_r (get_defined_functions ()); и __autoload () указан после require_once () файла, в котором он находится, и не был указан ранее, поэтому я знаю, что он получает правильную функцию.
Я также проверил установленный include_path, который находится в корне исходной папки Amazon Payments, где он и должен быть, поэтому нет причин, по которым он не найдет класс OffAmazonPaymentsService_Client, если вызывается __autoload ().
Кто-нибудь может посоветовать, почему __autoload () не работает в CLI? Я не выполняю с php -a …
Я заменил __autoload () в AmazonPayments PHP SDK на spl_autoload_register (), и это сработало.
/*
function __autoload($className){
$filePath = str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
$includePaths = explode(PATH_SEPARATOR, get_include_path());
foreach($includePaths as $includePath){
if(file_exists($includePath . DIRECTORY_SEPARATOR . $filePath)){
require_once $filePath;
return;
}
}
}
*/
spl_autoload_register(function($className){
$filePath = str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
$includePaths = explode(PATH_SEPARATOR, get_include_path());
foreach($includePaths as $includePath){
if(file_exists($includePath . DIRECTORY_SEPARATOR . $filePath)){
require_once $filePath;
return;
}
}
});
Других решений пока нет …