我正在使用etrade api,它建立在很多静态调用很多函数的类之上。因此,如果我将其更改为“公共静态功能”,我将继续收到这些错误。以下是完整的错误消息:
非静态方法RequestParamsMain :: buildFullURL()不应该静态调用,假设来自第72行/home/detroitclicks/public_html/etrade/Market/MarketClient.class.php中不兼容上下文的$ 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);
答案 0 :(得分:0)
问题不在你的代码中,而是在你正在使用的API中,因为它静态地调用非静态方法(即RequestParamsMain::buildFullURL
)。这种调用在旧版本的PHP中是允许的,并且没有生成警告消息,但它在较新版本中执行,如5.4
您可以考虑以下几个选项:
查找您正在使用的第三方软件的更新版本。如果你没有找到它,把它扔出窗外,因为它是一块垃圾,它的作者根本不理解面向对象编程的概念。如果有其他选择,我会建议这个选项。
修改您正在使用的第三方软件的来源。我不建议这样做,因为它可能是一项繁琐的工作,甚至可能不适合许可。
更新:如果它是API中的一个错误,您可以通过检查RequestParamsMain::buildFullURL
是否完全静态使用来修复它,如果是,则将其设为静态方法。如果它实际上不是静态方法,则通过从RequestParamsMain
类创建对象来使调用非静态,例如:
$request = new RequestParamsMain(/* arguments */);
$resourceURL = $request->buildFullURL(URL_PRODUCTLOOKUP,null,$param_obj);
但是,如果有多个问题,我真的不建议重复使用它们,因为它很容易就可以完成大量的工作,软件的新版本可能很容易超出你的结果。无论如何,针对开发人员的错误报告在所有情况下都很有用。
转动严格警告以隐藏这些错误消息。当然,这不是一个真正的解决方案,只是一种解决方法。 E.g:
error_reporting(E_ALL ^ E_STRICT);
答案 1 :(得分:0)
根据我对etrade api的经验,他们都充满了错误。我想在很大程度上他们已经老了。
他们的REST API记录得很好,并不完美。我建议你自己动手。您可以删除的库依赖项越多越好。