Bruce
Bruce

Reputation: 107

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

I am using the etrade api which is built upon a lot of classes that call a lot of the functions statically. Hence if I change it to "public static function" I will just keep getting these errors. Here is the full error message:

Non-static method RequestParamsMain::buildFullURL() should not be called statically, assuming $this from incompatible context in /home/detroitclicks/public_html/etrade/Market/MarketClient.class.php on line 72

Here is the code to that function under the class Market. The class RequestParamsMain is in a separate php file that is included in this file:

public function productLookup($param_obj)
{

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

}

here is the code I am trying to execute:

$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);

Upvotes: 0

Views: 700

Answers (2)

rjs2006
rjs2006

Reputation: 1

In my experience with the etrade api's they are all full of errors. I suppose becuase in large part they are old.

Their REST API is documented well enough, not perfect. I'd suggest rolling your own. The more library dependencies you can remove the better.

Upvotes: 0

mcserep
mcserep

Reputation: 3299

The problem in not in your code, rather in the API you are using, because it calls non-static methods (namely RequestParamsMain::buildFullURL) statically. This kind of calling was allowed in older versions of PHP and did not generate a warning message, but it does in newer ones, like 5.4

You have several options to consider:

  1. Look for an updated version of the 3rdparty software you are using. If you do not found one, throw it out the window, because it is a piece of garbage and its authors did not understand the concept of object oriented programming at all. I would suggest this option if there are alternatives.

  2. Modify the source of the 3rdparty software you are using. I would not recommend this, because it can be a tedious work and it may not even fit with the licensing.

    Update: If it is a single bug in the API, you may fix it, by examining whether the RequestParamsMain::buildFullURL is used completely statically and if yes, make it a static method. If it is really not a static method, make the call non-static by creating an object from the RequestParamsMain class, e.g.:

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

    However, if there are multiple issues, I would really not recommend to go over all of them, because it can easily be a huge amount of work and a new version for the software may easily out-wipe your results. Anyway, a bug report towards the developers can be useful in all cases.

  3. Turn of strict warnings to hide these error messages. Of course it is not a real solution, just a workaround. E.g.:

    error_reporting(E_ALL ^ E_STRICT);

Upvotes: 0

Related Questions