Php 不应静态调用非静态方法RequestParamsMain::buildFullURL()
我使用的是etrade api,它构建在静态调用许多函数的许多类之上。因此,如果我将其更改为“publicstaticfunction”,我将继续得到这些错误。以下是完整的错误消息: 不应静态调用非静态方法RequestParamsMain::buildFullURL(),假设第72行/home/detroitclicks/public\u html/etrade/Market/MarketClient.class.php中不兼容的上下文中的$this 下面是类Market下该函数的代码。RequestParamsMain类位于一个单独的php文件中,该文件包含:Php 不应静态调用非静态方法RequestParamsMain::buildFullURL(),php,class,static,etrade-api,Php,Class,Static,Etrade Api,我使用的是etrade api,它构建在静态调用许多函数的许多类之上。因此,如果我将其更改为“publicstaticfunction”,我将继续得到这些错误。以下是完整的错误消息: 不应静态调用非静态方法RequestParamsMain::buildFullURL(),假设第72行/home/detroitclicks/public\u html/etrade/Market/MarketClient.class.php中不兼容的上下文中的$this 下面是类Market下该函数的代码。Req
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)中会生成警告消息
您可以考虑以下几种选择:
RequestParamsMain::buildFullURL
是否完全静态使用来修复它,如果是,则将其设置为静态方法。如果它确实不是静态方法,请通过从RequestParamsMain
类中创建一个对象,使调用成为非静态的,例如:
$request=newrequestparamsmain(/*arguments*/);
$resourceURL=$request->buildFullURL(URL\u PRODUCTLOOKUP,null,$param\u obj)代码>
但是,如果存在多个问题,我真的不建议将它们全部检查一遍,因为这很容易会是一个巨大的工作量,并且软件的新版本可能会很容易抹去您的结果。无论如何,向开发人员提供的bug报告在所有情况下都是有用的
错误报告(E_ALL^E_STRICT)代码>
根据我使用etrade api的经验,它们都充满了错误。我想主要是因为他们年纪大了
他们的RESTAPI文档记录得足够好,但并不完美。我建议你自己滚。您可以删除的库依赖项越多越好。etrade是游戏中唯一的玩家。唯一的其他选择是上传csv或手动输入数据。在这种情况下,您对修改api有什么建议?我扩展了关于这个主题的回答。