0

我正在使用 Amazon Payments PHP SDK 并且 __autoload() 在浏览器中运行良好,但是当我切换到我的 CLI 脚本时,它似乎并没有调用该函数。

我得到的只是“PHP 致命错误:找不到类‘OffAmazonPaymentsService_Client’”。

我已经在 __autoload() 函数中进行了调试,以回显被调用的函数和文件路径,并且终端中没有打印任何内容,只是在浏览器中。

我已经完成了 print_r(get_defined_functions()); 并且 __autoload() 列在它所在文件的 require_once() 之后,之前没有列出,所以我知道它得到了正确的功能。

我还检查了 include_path 正在设置,它位于 Amazon Payments 源文件夹的根目录中,它应该在其中,因此如果调用 __autoload(),它没有理由找不到类 OffAmazonPaymentsService_Client。

谁能告诉我为什么 __autoload() 在 CLI 中不起作用?我没有用 php -a 执行...

4

1 回答 1

0

我已经用 spl_autoload_register() 替换了 AmazonPayments PHP SDK 中的 __autoload() 并且已经成功了。

/*
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;
                }
        }
});
于 2014-10-16T08:41:18.497 回答