__autoload()没被调用?

时间:2014-10-16 08:05:07

标签: php linux command-line-interface amazon-pay

我正在使用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类。< / p>

有人可以建议为什么__autoload()不能在CLI中运行吗?我没有用php -a ...

执行

1 个答案:

答案 0 :(得分: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;
                }
        }
});