非静态方法 RequestParamsMain::buildFullURL() 不应静态调用


Non-static method RequestParamsMain::buildFullURL() should not be called statically

我正在使用etrade api,它建立在很多静态调用很多函数的类之上。因此,如果我将其更改为"公共静态函数",我只会不断收到这些错误。以下是完整的错误消息:

非静态方法 RequestParamsMain::buildFullURL() 不应该静态调用,假设从/home/detroitclicks/public_html/etrade/Market/MarketClient.class.php 第 72 行的不兼容上下文中$this

这是 Market 类下该函数的代码。类 RequestParamsMain 位于此文件中包含的单独 php 文件中:

public function productLookup($param_obj)
{
    self::validateParamObj($param_obj,false);
    $resourceURL = RequestParamsMain::buildFullURL(URL_PRODUCTLOOKUP,null,$param_obj);
    return $this->getMarketResponse($resourceURL);
}

这是我尝试执行的代码:

$request_params = new productLookupParams();
$request_params->__set('company', 'cisco'); // company = "cisco" for example
$request_params->__set('type', 'eq'); // type = equity for example
$out= $mc_obj->productLookup($request_params);

问题不在于您的代码,而在于您正在使用的 API,因为它静态调用非静态方法(即 RequestParamsMain::buildFullURL)。这种调用在旧版本的 PHP 中是允许的,并且不会生成警告消息,但在较新版本中允许,例如 5.4

您有几种选择需要考虑:

  1. 查找您正在使用的第三方软件的更新版本。如果你没有找到,把它扔出窗外,因为它是一块垃圾,它的作者根本不了解面向对象编程的概念。如果有替代方案,我会建议这个选项。

  2. 修改您正在使用的第三方软件的来源。我不建议这样做,因为它可能是一项乏味的工作,甚至可能不适合许可。

    更新:如果它是 API 中的单个错误,您可以通过检查RequestParamsMain::buildFullURL是否完全静态使用来修复它,如果是,则使其成为静态方法。如果它确实不是静态方法,则通过从RequestParamsMain类创建一个对象来使调用非静态,例如:

    $request = new RequestParamsMain(/* arguments */); $resourceURL = $request->buildFullURL(URL_PRODUCTLOOKUP,null,$param_obj);

    但是,如果有多个问题,我真的不建议检查所有问题,因为它很容易成为大量的工作,并且该软件的新版本可能很容易超过您的结果。无论如何,向开发人员提交的错误报告在所有情况下都很有用。

  3. 打开严格警告以隐藏这些错误消息。当然,这不是一个真正的解决方案,只是一个解决方法。例如:

    error_reporting(E_ALL ^ E_STRICT);

根据我对etrade api的经验,它们都充满了错误。 我想是因为在很大程度上他们老了。

他们的 REST API 记录得足够好,并不完美。 我建议自己滚。 可以删除的库依赖项越多越好。