如何通过名字自动附加课程?

时间:2015-10-01 19:06:29

标签: php amazon-mws

我从这里下载了PHP亚马逊MWS报告客户端库:

https://developer.amazonservices.com/gp/mws/api.html/182-5103998-0984662?ie=UTF8&group=bde&section=reports&version=latest

我试图让它工作,但看起来图书馆没有开箱即用,或者有些东西我不能完全理解。例如,在samples文件夹中有一些示例函数,可以让您立即加快速度,但是当您运行其中任何一个时,PHP会抱怨缺少类。让我们看看其中一个的顶线之一:

Array
(
    [111] => Array
        (
            [0] => Array
                (
                    [2] => Array
                        (
                            [0] => Array
                                (
                                    [service_providers] => Array
                                        (
                                            [0] => Google
                                        )

                                )

                        )

                )

        )

)

所以它实例化了MarketplaceWebService_Client,但是该类既未附加到此文件,也未在其中找到。快速搜索后,我发现该功能存在于以下层次结构中:

MarketplaceWebService / Client.php

你能看到类名的相似之处吗?这应该怎么样?我应该使用require_once添加所有这些文件,还是应该有任何自动加载它们的机制?

另一个:

下的类MarketplaceWebService_Model_GetReportListRequest

MarketplaceWebService /型号/ GetReportListRequest.php

我知道我可以创建一个__autoload函数并简单地动态附加这些类,但这是作者想到的吗?

2 个答案:

答案 0 :(得分:1)

PHP具有autoload功能,如果运行时不存在必需的类,则可以调用函数。此功能允许脚本通过包含包含它的文件来生成缺少的类。

这是一个改编自PHP manual的例子。

// Your missing class is called MarketplaceWebService_Client
// The code for this class is in MarketplaceWebService/Client.php

// define a function that will be called when a class does not yet exist
function my_autoloader($class) {

    // implement the rules to convert the class into the file naming convention
    $path = str_replace('_', '/', $class) . 'php';

    // if there is a match, then include it now
    if(file_exists($path)) {
        include_once $path;
    }
}

// tell PHP about the autoload function
spl_autoload_register('my_autoloader');

您可能需要调整上面的示例以适合您的特定代码和文件夹结构。

答案 1 :(得分:0)

我无法与PHP客户端库通信,但C#库是开箱即用的,并从头开始编译。 MWS团队针对这些类型的问题提供了专门的联系我们页面。他们愿意与您一起解决您的问题并让您感动。您必须使用卖家凭据登录才能访问此页面。试一试。

https://sellercentral.amazon.com/gp/mws/contactus.html