【问题标题】:Non-static method RequestParamsMain::buildFullURL() should not be called statically不应静态调用非静态方法 RequestParamsMain::buildFullURL()
【发布时间】:2015-01-13 19:12:15
【问题描述】:

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

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

这是 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);

【问题讨论】:

    标签: php class static etrade-api


    【解决方案1】:

    根据我使用 etrade api 的经验,它们都充满了错误。我想是因为它们很老了。

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

    【讨论】:

      【解决方案2】:

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

      您有多种选择:

      1. 查找您正在使用的 3rdparty 软件的更新版本。如果你没有找到,就把它扔到窗外,因为它是一块垃圾,它的作者根本不了解面向对象编程的概念。如果有其他选择,我会建议此选项。

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

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

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

        但是,如果有多个问题,我真的不建议全部检查一遍,因为这很容易成为大量工作,并且软件的新版本可能会轻易抹去您的结果。无论如何,向开发人员报告错误在所有情况下都是有用的。

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

        error_reporting(E_ALL ^ E_STRICT);

      【讨论】:

      • etrade 是游戏中唯一的玩家。唯一的其他选择是上传 csv 或手动输入数据。在这种情况下,您对修改 api 有何建议?
      • 我扩展了我对这个话题的回答。
      猜你喜欢
      • 2014-09-08
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多