繁体   English   中英

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

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

我正在使用etrade api,该api建立在许多静态调用许多函数的类上。 因此,如果将其更改为“ public static function”,我将继续得到这些错误。 这是完整的错误消息:

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

这是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. 查找您正在使用的3rdparty软件的更新版本。 如果找不到,请将其扔到窗外,因为它是垃圾,它的作者根本不了解面向对象编程的概念。 如果有其他选择,我建议您使用此选项。

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

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

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

    但是,如果有多个问题,我真的不建议您全部解决,因为这很容易导致大量工作,而且该软件的新版本可能会轻易抵消您的结果。 无论如何,针对开发人员的错误报告在所有情况下都是有用的。

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

    error_reporting(E_ALL ^ E_STRICT);

根据我对etrade api的经验,它们都充满了错误。 我想主要是因为它们已经老了。

他们的REST API记录得足够好,还不够完善。 我建议自己动手。 您可以删除的库依赖关系越多越好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM